[英]C# how to write a generic method
我有几个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);
我查看了示例和文档,但这主要是关于泛型类的。 我似乎语法不正确
您需要一个通用的基类或接口,然后只需向您的通用方法添加一个约束即可:
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的方法 。第一个代码段中的通用接口或基类,您将获得类型安全性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.