【问题标题】:Interface<T> with T as return type from extension methods [duplicate]Interface<T> 与 T 作为扩展方法的返回类型 [重复]
【发布时间】:2021-02-04 20:42:47
【问题描述】:

也许我在这个问题上停留在我的观点上。我只是想消除对演员表的需求(MyClass)。

var c = (MyClass)new MyClass { }.MyExtensionMethod();

MyClass 实现 IMyInferface

IMyInterface.cs

public interface IMyInterface<T>
        where T : class
{
    // props
}

MyInterfaceExtensions.cs

public static class MyInterfaceExtensions
{
    public static T MyExtensionMethod<T>(this IMyInterface<T> item, Guid id)
    {
         item.CreatedTimestamp = DateTime.UtcNow;
         item.MySecondExtMethod(id);
         return (T)item;
    }
}

我仍然在this IMyInterface&lt;T&gt; item 上收到错误“类型 T 必须是引用类型才能将其用作参数”。

【问题讨论】:

  • ITrackable&lt;T&gt;IMyInteface&lt;T&gt;是什么关系?
  • 您还必须将where T: class 添加到您的扩展方法中。也就是说,如果您谈论的是相同的界面。不过,您的示例显示了不同的界面,这是疏忽还是故意?
  • @PavelAnikhouski 我编辑了它。错过了这个。
  • @LasseV.Karlsen 错过了那个。是的,它是一样的。
  • 在使用其他泛型类型时需要满足泛型约束。查看副本。

标签: c# .net generics .net-core extension-methods


【解决方案1】:

@LasseV.Karlsen 在评论中回答了它。 我错过了where T : class 的方法。

public static T MyExtensionMethod<T>(this IMyInterface<T> item, Guid id)
     where T : class
{
   // code
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多