我正在处理的项目需要一些简单的审计日志记录,以便用户更改其电子邮件,帐单地址等.我们正在使用的对象来自不同的来源,一个是WCF服务,另一个是Web服务.
我已经使用反射实现了以下方法来查找对两个不同对象的属性的更改.这将生成一个属性列表,这些属性与旧值和新值有差异.
public static IList GenerateAuditLogMessages(T originalObject, T changedObject)
{
IList list = new List();
string className = string.Concat("[", originalObject.GetType().Name, "] ");
foreach (PropertyInfo property in originalObject.GetType().GetProperties())
{
Type comparable =
property.PropertyType.GetInterface("System.IComparable");
if (comparable != null)
{
string originalPropertyValue =
property.GetValue(originalObject, null) as string;
string newPropertyValue =
property.GetValue(changedObject, null) as string;
if (originalPropertyValue != newPropertyValue)
{
list.Add(string.Concat(className, property.Name,
" changed from '", originalPropertyValue,
"' to '", newPropertyValue, "'"));
}
}
}
return list;
}Run Code Online (Sandbox Code Playgroud)
我正在寻找System.IComparable,因为"所有数字类型(如Int32和Double)都实现IComparable,String,Char和DateTime也是如此." 这似乎是找到任何不是自定义类的属性的最佳方法.
利用由WCF或Web服务代理代码生成的PropertyChanged事件听起来不错,但没有为我的审计日志(旧值和新值)提供足够的信息.
如果有更好的方法来寻找输入,谢谢!
@Aaronaught,这里是一些基于执行object.Equals生成正匹配的示例代码:
Address …Run Code Online (Sandbox Code Playgroud) 在MVVM开发中,我不断地List<T>从我的模型转换ObservableCollection<T>为我的视图.
我环顾四周,在.NET一种方式来简洁地做到这一点如如.ToList<>或.ToArray<>或.ToDictionary<>却找不到任何类似的ObservableCollection.
因此我做了以下扩展方法ConvertToObservableCollection<T>().
是否有更好的转换List<T>方式ObservableCollection<T>,或者每个MVVM开发人员最终都会在某个时候编写此扩展方法?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Documents;
using System.Collections.ObjectModel;
namespace TestObser228342
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
List<string> names = new List<string> { "one", "two", "three" };
ObservableCollection<string> ocNames =
names.ConvertToObservableCollection<string>();
ocNames.ToList().ForEach(n => Console.WriteLine(n));
List<Customer> customers = new List<Customer>
{
new …Run Code Online (Sandbox Code Playgroud) 我使用Bazaar,我喜欢它.通常,我只是创建不同的分支并分别管理它们.我刚刚发现所有这些分支都可以放入存储库.如果我理解正确,这应该节省内存并提高速度,因为分支之间的一些共同祖先是共享的.Q1:我理解这一点吗?
另一件事是,当我尝试使用它时,我发现了一些我真的不明白的问题.这就是我的尝试方式.
bzr init-repo --trees TestBzrRepo
cd TestBzrRepo
bzr init trunk
mkdir branches
cd branches
bzr branch ../trunk b01-Add-file2-f
echo 'This is file 2' > file2.f
bzr add file2.f
bzr commit -m "Add file 2"
cd ../../trunk
echo 'This is file 1' > file1.f
bzr add file1.f
bzr commit -m "Add file 1"
cd ../branches/b01-Add-file2-fRun Code Online (Sandbox Code Playgroud)
从现在开始,如果我这样做bzr pull ../../trunk,我得到:
bzr: ERROR: These branches have diverged. Use the missing command to see how.
Use the merge command to reconcile them.Run Code Online (Sandbox Code Playgroud)
如果我这样做bzr …
我有两个保证长度相同的列表.我想比较列表中的相应值(第一项除外)并打印出不匹配的值.我这样做是这样的
i = len(list1)
if i == 1:
print 'Nothing to compare'
else:
for i in range(i):
if not (i == 0):
if list1[i] != list2[i]:
print list1[i]
print list2[i]
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?(Python 2.x)
我知道如何在ASP.NET Web应用程序项目中启用"编辑并继续" (请参阅此处),但是,我没有找到有关如何在ASP.NET Web站点项目中实现相同功能的信息.
网站项目中是否提供此功能?如果不是,似乎将我们的Web站点项目转换为Web应用程序确实值得做.
我正在调查一个web框架/技术,它允许将n个文件系统中的文件拖放到Web应用程序中.目的当然是将这些文件上传到应用程序服务器.
在Flex中,它似乎是不可能的(尽管它适用于AIR).我已经找到了使用Google Gears的方法,但这迫使用户将Gears安装为浏览器插件.
使用Java小程序,它似乎是可能的,但它需要用户接受安全规则异常......(对我来说很奇怪,因为通过DnD读取用户指定的文件并不比用户"安全""安全"通过标准的经典上传对话框指定了文件...).
是否有任何非侵入性的方式来允许此功能,而无需安装任何插件并且不接受安全警告消息框?
你如何传递Nhibernate HQL中'in'子句的列表?
例如
// data input from the user interface, not known at compile time
object[] productIds = {1, 17, 36, ... };
string hqlQuery = @"
from Product as prod
where prod.Id in ( ? )";
HqlBasedQuery query = new HqlBasedQuery(typeof(Product), hqlQuery, productIds)
ActiveRecordMediator.ExecuteQuery(query);
Run Code Online (Sandbox Code Playgroud)
现在,这不会起作用,就像我希望的那样!我真的坚持做这样的事情:
// data input from the user interface, not known at compile time
object[] productIds = {1, 17, 36, ... };
string hqlQuery = @"
from Product as prod
where prod.Id in ( {0} )"; …Run Code Online (Sandbox Code Playgroud) 另请参见LINQ to Objects和LINQ to SQL查询之间的差异
我们在数据库和内存对象中使用了一些查询.
与linq-to-sql相比,使用不敏感字符串的最佳方法是什么?
运用
a.ToLowerInvariant() == b.ToLowerInvariant()
Run Code Online (Sandbox Code Playgroud)
至少得到相同的结果,但据我所知,它不会在SQL服务器上处理,所以可能会慢得多
a == b
Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×2
asp.net ×1
auditing ×1
bazaar ×1
comparison ×1
file-upload ×1
generics ×1
hql ×1
intellisense ×1
linq ×1
linq-to-sql ×1
mvvm ×1
nhibernate ×1
python ×1
reflection ×1