gpt4 book ai didi

c# - 为什么类型推断不能根据约束确定类型

转载 作者:行者123 更新时间:2023-12-03 20:38:06 26 4
gpt4 key购买 nike

我已经制作了一个界面,以便我可以尝试使一些重复的代码变得通用。

public interface IIdentifiable<T>
{
T Id { get; set; }
}

然后我有一个与实体一起使用的类,其约束为 IIdentifiable<T>

public class MyClass<TEntity, TId>
where TEntity : IIdentifiable<TId> {}

但现在每当我使用MyClass时我必须传入TId即使 TId 只有一种有效类型.

public class MyEntity : IIdentifiable<Guid> {}

var foo = new MyClass<MyEntity>(); // Error
var bar = new MyClass<MyEntity, Guid>();

在 C++ 中我可以这样做:

template<typename T>
struct IIdentifiable
{
using id_type = T;

T id;
};

template<typename TEntity, typename TId = typename TEntity::id_type>
struct MyClass {};

MyClass<MyEntity> foo;

是否有 C# 等效项?

最佳答案

there is only one valid type for TId

错了!:)

反例:

public class MyEntity : IIdentifiable<Guid>
{
public Guid Id { get; set; }
}

public class MyOtherEntity : MyEntity, IIdentifiable<int>
{
int IIdentifiable<int>.Id { get; set; }
}

var foo = new MyClass<MyOtherEntity>(); // So, which IIdentifiable should be used?

此外,C# 泛型不像 C++ 模板那样工作,它们在运行时具体化并具有不同的约束。

关于c# - 为什么类型推断不能根据约束确定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36693578/

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