我有一些Types
,它们都具有相同的"元数据"属性。我希望有一个方法,我可以传递任何Type
的对象作为参数来更新其元数据。
我可以在方法中使用dynamic
参数,如下所示:
private void UpdateMeta(dynamic obj)
{
obj.meta1 = DateTime.Now;
obj.meta2 = "acb";
obj.meta3 = 123;
obj.meta4 = "foo";
}
Type1 objtype1 = new Type1();
Type2 objtype2 = new Type2();
Type3 objtype3 = new Type3();
UpdateMeta(objtype1);
UpdateMeta(objtype2);
UpdateMeta(objtype3);
但是类型安全泛型呢,确切的语法是什么?以下是我到目前为止的情况:
private void UpdateMeta<T>(ref T obj)
{
obj.meta1 = DateTime.Now;
obj.meta2 = "acb";
obj.meta3 = 123;
obj.meta4 = "foo";
}
Type1 objtype1 = new Type1();
Type2 objtype2 = new Type2();
Type3 objtype3 = new Type3();
UpdateMeta<Type1>(objtype1);
UpdateMeta<Type2>(objtype2);
UpdateMeta<Type3>(objtype3);
我查了示例和文档,但主要是关于泛型类。我似乎无法正确使用语法
答案 0 :(得分:4)
您需要一个公共基类或接口。然后只需在您的泛型方法中添加一个约束:
public interface ICommonInterface
{
// declare your properties here
// and don't forget to implement this interface in your classes
}
private void UpdateMeta<T>(T obj)
where T : ICommonInterface
{
obj.meta1 = DateTime.Now;
obj.meta2 = "acb";
obj.meta3 = 123;
obj.meta4 = "foo";
}
正如评论中所提到的,在这种情况下你甚至不需要使用泛型,因为你只是更新了一些属性的值。你可以只有一个带有common interface类型参数的方法。你可以这样做在第一个代码片段中使用通用接口或基类更改动态,您将获得类型安全性。