gpt4 book ai didi

c# - 在 C# 中实现接口(interface)的通用方法时出现奇怪的错误。这里到底出了什么问题?

转载 作者:行者123 更新时间:2023-12-03 23:05:43 25 4
gpt4 key购买 nike

public interface IGet<T>
{
T Get<K>(K id);
}

public interface IDemoRepository : IGet<Dto.Message>
{

}

public class DemoRepository : IDemoRepository
{
public Dto.Message Get<string>(string messageId)
{
using (var db = new AppDbContext())
{
return db.Messages
.FirstOrDefault(f => f.MessageId.ToLower() == messageId.ToLower());
}
}
}
以下是错误列表中的错误。
Severity    Code    Description
Error CS1001 Identifier expected
Error CS1003 Syntax error, '>' expected
Error CS1003 Syntax error, '(' expected
Error CS1001 Identifier expected
Error CS1003 Syntax error, ',' expected
Error CS1003 Syntax error, ',' expected
Error CS8124 Tuple must contain at least two elements.
Error CS1001 Identifier expected
Error CS1026 ) expected
Error CS0535 'DemoRepository' does not implement interface member 'IGet<Dto.Message>.Get<K>(K)'
Error CS0103 The name 'messageId' does not exist in the current context
一个 .NET 的成功和失败场景
here

最佳答案

编译器给出这么多错误的原因是它期望 <> 中有一个标识符。 ,但是您在其中放置了一个关键字( string )。结果编译器感到困惑,并且解析非常错误。这也是为什么使用 Guid 时错误会更少的原因。 , 因为 Guid是一个标识符。但是替换 stringGuid也不符合您的预期。
你似乎想要DemoRepository只执行 IDemoRepository在一个非常特殊的情况下,即当 Kstring .
请注意,实现 IDemoRepository 的要求是它应该有一个通用的Get方法,可以采用任何类型K , 并返回 Dto.Message .这就是:

public interface IGet<T>
{
T Get<K>(K id);
}

public interface IDemoRepository : IGet<Dto.Message>
{

}
我想这不是你真正想要的 IDemoRepository要求?如果您只希望它需要非通用 Get方法。采用特定类型 K ,可以由实现者选择,那么您可以执行以下操作:
// I moved the generic parameter K from the method to the interface
public interface IGet<T, K>
{
T Get(K id);
}

public interface IDemoRepository<K> : IGet<Dto.Message, K>
{

}

// here the implementer chose string as K
public class DemoRepository : IDemoRepository<string>
{
public Dto.Message Get(string messageId)
{
...
}
}

关于c# - 在 C# 中实现接口(interface)的通用方法时出现奇怪的错误。这里到底出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62871410/

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