gpt4 book ai didi

c# - 在非泛型接口(interface)中声明泛型方法

转载 作者:行者123 更新时间:2023-11-30 13:26:25 26 4
gpt4 key购买 nike

请考虑这段代码:

public interface ImyInterface
{
T GetEntity<T>(T t,int MasterID);
}

我声明了一个类名:MyEntity 并且它有一个名为 A_1

的属性
public class BL_Temp : ImyInterface
{
public MyEntity GetEntity<MyEntity>(MyEntity t, int MasterID)
{
t.A_1 = ""; //Error
return t;
}
}

错误是:

'MyEntity' does not contain a definition for 'A_1' and no extension method 'A_1' accepting a first argument of type 'MyEntity' could be found (are you missing a using directive or an assembly reference?)

是否可以在非泛型接口(interface)中声明泛型方法?

我的错误在哪里?

谢谢


编辑1)

考虑 MyEntity 声明是:

public class MyEntity
{
public string A_1 {set; get;}
}

最佳答案

您可以声明,但您的方法将是通用的,而不是特定类型。我的意思是 MyEntity 是通用参数,它不是您的实体类型。

您可以像这样向您的实体添加约束,这允许您访问 Entity 特定成员..

public interface ImyInterface
{
T GetEntity<T>(T t,int MasterID) where T : Entity;
}

public class BL_Temp : ImyInterface
{
public T GetEntity<T>(T t, int MasterID) where T : Entity
{
t.MyEntityProperty = "";
return t;
}
}

我知道这是示例代码,但我觉得值得一提的是您的方法不应该说谎。方法名称是 GetEntity 但它改变了客户端可能不知道的参数(我会说它撒谎了)。 IMO 你至少应该重命名方法或者不要改变参数。

关于c# - 在非泛型接口(interface)中声明泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23977157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com