【发布时间】:2017-05-23 13:59:38
【问题描述】:
我正在尝试将具有相同属性的匿名类型转换为接口,但出现错误:
无法将“f__AnonymousType104`1[System.Int32]”类型的对象转换为“IHasFiles”类型。
public interface IHasFiles
{
int FileMasterId { get; }
}
var entity = new { FileMasterId = fileMasterId }.CastOrDefault<IHasFiles>();
// This is the line where I get the error
【问题讨论】:
-
不确定这是否是问题所在,但您在此处使用属性设置器:FileMasterId = fileMasterId。在您的界面中,您刚刚获得了一个 Getter。
-
问题是匿名对象不实现了那个接口,所以你不能转换它。 c# 不做鸭子类型,所以你唯一的选择是从你的匿名对象创建一个新对象,并确保新对象是实现接口的类型。
-
@Sebi 好像不是,我已经在界面中添加了setter,但仍然出现同样的错误。
-
它应该使用继承自 IHasFiles 的具体类型。
-
严格来说不是接口,而是
public static THasFiles Cast<THasFiles>(this dynamic anonType) where THasFiles : IHasFiles, new() { THasFiles result = new THasFiles(); foreach(var prop in typeof(THasFiles).GetProperties().Where(property => anonType.GetType().GetProperty(property.Name) != null))) { prop.SetValue(result, anonType.GetType().GetProperty(property.Name).GetValue(anonType)); } return result }
标签: c# anonymous-types