我正在尝试编写一个NullObject创建方法,在其中传入一个实现ICreateEmptyInstance接口(即为空)的类名,并且它遍历它的属性,寻找实现的其他类,ICreateEmptyInstance并将创建那些的"Null"实例.
public interface ICreateEmptyInstance { }
public static class NullObject
{
public static T Create<T>() where T : ICreateEmptyInstance, new()
{
var instance = new T();
var properties = typeof(T).GetProperties();
foreach (var property in properties.Where(property => typeof(ICreateEmptyInstance).IsAssignableFrom(property.PropertyType)))
{
var propertyInstance = NullObject.Create<property.PropertyType>();
property.SetValue(instance, propertyInstance);
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
我应该可以用它来称呼它
var myEmptyClass = NullObject.Create<MyClass>();
Run Code Online (Sandbox Code Playgroud)
我遇到问题的地方是在foreach循环中,有了这一行
var propertyInstance = NullObject.Create<property.PropertyType>();
Run Code Online (Sandbox Code Playgroud)
...显然这不起作用,但我怎样才能完成创建"空对象"以分配给我正在创建的实例.
编辑:那么泛型呢?我想创建空实例
foreach (var property in properties.Where(property => property.GetType().IsGenericType))
{
var propertyInstance = Enumerable.Empty<>(); //TODO: …Run Code Online (Sandbox Code Playgroud) 我创建了一个用于记录异常的WCF服务(我意识到如果网络出现故障,就不会记录任何内容......有回退的地方)
无论如何,它有两种方法
int LogException(MethodBase methodBase, Exception exception)
int LogMessage(MethodBase methodBase, string message, string data)
Run Code Online (Sandbox Code Playgroud)
当我尝试将服务添加到新项目时,不会创建.cs文件.我运行了svcutil,并将.cs和config设置复制到项目中,并尝试使用生成的客户端调用服务.我收到以下两个错误
尝试序列化参数http://tempuri.org/:methodBase时出错 .InnerException消息是'Type'System.Reflection.RuntimeMethodInfo',数据协定名称为'RuntimeMethodInfo:http://schemas.datacontract.org/2004/07/System.Reflection'不是预期的.考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.有关更多详细信息,请参阅InnerException.
内心异常
键入'System.Reflection.RuntimeMethodInfo',数据协定名称为'RuntimeMethodInfo:http://schemas.datacontract.org/2004/07/System.Reflection'.考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.
我需要做些什么来完成这项工作?
我把交易放在我所有的"设定"程序中.没问题.一切正常.
在这种情况下,我需要一个设置过程,谢天谢地,只需要调用一次,或者可能会使事情进一步复杂化.
所以快乐的沐浴会.
但是,如果ProcB失败,回滚并重新抛出错误会发生什么.它应该导致ProcA回滚也正确吗?
如果ProcB成功,提交,然后ProcA随后失败,并且回滚......那么ProcB中发生的事情会被回滚吗?还是承诺?
我需要这两个一起工作,要么成功要么失败都要回滚.确保这种情况发生的最佳方法是什么?
我正在使用Microsoft SQL Server 2008 R2(SP1)
注意:如果ProcB需要事务,因为可以在没有ProcA包装的情况下调用它.从技术上讲,ProcA并不总是会调用ProcB(取决于输入).
我有以下是一个数组
package.Resources
Run Code Online (Sandbox Code Playgroud)
如果我使用
package.Resources.ToList().Add(resouce);
Run Code Online (Sandbox Code Playgroud)
package.Resources实际上不包含新项目.
我必须使用
var packageList = package.Resources.ToList();
packageList.Add(resource);
package.Resources = packageList.ToArray();
Run Code Online (Sandbox Code Playgroud)
这是为什么?