c#4.0-c#如何编写一个通用方法

本文关键字:一个 方法 0-c# 何编写 c#4 | 更新日期: 2023-09-27 18:00:27

我有几个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);

我查阅了一些例子和文档,但主要是关于泛型类的。我似乎无法获得正确的语法

c#4.0-c#如何编写一个通用方法

您需要一个通用基类或接口。然后只需为您的通用方法添加一个约束:

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";
}

正如注释中所提到的,在这种情况下,您甚至不需要使用泛型,因为您只更新某些属性的值。您可以只使用一个方法来获取类型为commoninterface的参数。您可以在第一个代码片段中使用公共接口或基类更改动态,从而获得类型安全性。