gpt4 book ai didi

泛型类中的 c# 方法仅适用于某些类型

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

我正在尝试在仅限于特定类型的泛型类上定义一个方法。我想出了这个:

interface IHasId 
{
int Id { get; }
}

public class Foo<T>
{
private List<T> children;

public IHasId GetById(int id)
{
foreach (var child in children.Cast<IHasId>())
{
if (child.Id == id)
{
return child;
}
}

return null;
}
}

它会工作,但它看起来像代码味道......似乎应该有一种方法让编译器强制执行此操作。像这样的东西:

public class Foo<T>
{
public IHasId GetById<TWithId>(int id) where TWithId : IHasId {}
}

或者,甚至更好:

public class Foo<T>
{
public IHasId GetById(int id) where T : IHasId {}
}

我看到一些与 Java 相关的帖子,其中一篇专门讨论将 T 限制为枚举,但没有直接切入点。

最佳答案

你不能有基于单一类型的可选方法。但是,您可以使用继承来使其发挥作用。

方法如下:

public interface IHasId 
{
int Id { get; }
}

public class Foo<T>
{
protected List<T> children;
}

public class FooHasId<T> : Foo<T> where T : IHasId
{
public IHasId GetById(int id)
{
foreach (var child in children)
{
if (child.Id == id)
{
return child;
}
}
return null;
}
}

使用 C#6 FooHasId 可以缩短为:

public class FooHasId<T> : Foo<T> where T : IHasId
{
public IHasId GetById(int id) => this.children.FirstOrDefault(x => x.Id == id);
}

关于泛型类中的 c# 方法仅适用于某些类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233004/

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