gpt4 book ai didi

c# - 带有泛型参数的普通 C# 类无缘无故无法编译

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:42 25 4
gpt4 key购买 nike

我想要一个通用函数,它可以处理具有 TopBottomRightRect 的类型只读属性 - 我在第三方库中有很多这样的类。

我是这样写的:

internal class MyTemplate<WhatType> {
internal static void Work( WhatType what )
{
int left = what.Left;
}
};

我希望它能正常工作——C++ 中的等效代码可以正常工作。但是 C# 对象:

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

我不明白 - 为什么它会在我调用它之前尝试实例化模板?当然,WhatType 类型还未知,因此找不到任何属性。

我做错了什么,我该如何解决?

最佳答案

C# 泛型不是模板;它们是在运行时提供的,而不是由编译器提供的。因此,没有鸭子类型。两种选择:

  • 使用 where WhatType : ISomeInterface 约束,其中 ISomeInterface 有一个 Left {get;}
  • 使用dynamic(提供duck-typing)

internal class MyTemplate<WhatType> where WhatType : ISomeInterface {
internal static void Work( WhatType what )
{
int left = what.Left;
}
};
interface ISomeInterface {
int Left { get; }
}

或:

internal class MyTemplate<WhatType> {
internal static void Work( WhatType what )
{
int left = ((dynamic)what).Left;
}
};

关于c# - 带有泛型参数的普通 C# 类无缘无故无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6956680/

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