gpt4 book ai didi

c# - 无法理解 C# 泛型

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

我能够理解 C# 泛型,但只有当我在一本示例易于理解的书中读到它时。但在现实生活中,我看到了如下所示的复杂 C# 泛型代码。有人可以向我解释这段代码的通用方面吗?我看到了类型参数,但不明白为什么 T 没有在方法主体中使用。 T 在体内如何使用?

public void ValidateExceptionFromResponse<T>( BaseClaimResponseDataContract<T> response )
{
if (response.CommunicationResponseCodes != null && response.CommunicationResponseCodes.Any())
{
var validateResult = new ValidationResults();
foreach (var communicationResponseCodeDataContract in response.CommunicationResponseCodes)
{
validateResult.AddResult( new ValidationResult(communicationResponseCodeDataContract.Description.Current, null, null, null, null));
}
throw FaultManager.GenerateFault(validateResult);
}
if( response.MessageError != null )
{
throw FaultManager.GenerateFault(eErrorCodes.Claims, response.MessageError.Current);
}
}

这是 BaseClaimResponseDataContract 的一个片段:

[KnownType(typeof(SummaryClaimsReportResponseDataContract))]
[KnownType(typeof(ClaimResponseDataContract))]
[KnownType(typeof(CommunicationResponseDataContract))]
[DataContract]
public class BaseClaimResponseDataContract<T>
{
[DataMember]
public bool IsRxClaim { get; set; }

[DataMember]
public ThirdPartyDataContract ThirdParty { get; set; }

[DataMember]
public ExternalSystemMessages RequestMessage { get; set; }

[DataMember]
public bool RequestAccepted { get; set; }

[DataMember]
public string ResponseStatus { get; set; }

[DataMember]
[StringLength(10)]
public string ResponseCodes { get; set; }

[DataMember]
public string[] ResponseCodesArray
{
get
{
var lstMessageCodes = new List<string>();

if (!string.IsNullOrEmpty(ResponseCodes))
{
for (int i = 0; i < ResponseCodes.Length / 2; i++)
{
var code = ResponseCodes.Substring(i*2, 2);
if (!string.IsNullOrWhiteSpace(code))
lstMessageCodes.Add(code);
}
}

return lstMessageCodes.ToArray();
}
}

[DataMember]
public IEnumerable<CommunicationResponseCodeDataContract> CommunicationResponseCodes;

[DataMember]
public StringDataContract MessageError { get; set; }

public void CopyFrom(BaseClaimResponseDataContract<T> claimResponse)
{
IsRxClaim = claimResponse.IsRxClaim;
ThirdParty = claimResponse.ThirdParty;
RequestMessage = claimResponse.RequestMessage;
RequestAccepted = claimResponse.RequestAccepted;
ResponseStatus = claimResponse.ResponseStatus;
ResponseCodes = claimResponse.ResponseCodes;
CommunicationResponseCodes = claimResponse.CommunicationResponseCodes;
MessageError = claimResponse.MessageError;
}
}

最佳答案

在这种情况下,通用参数的唯一目的似乎是强制方法的参数必须是 BaseClaimResponseDataContract<T>。 .我怀疑您的解决方案中有多种类型继承自此,例如:

public class SomeSample : BaseClaimResponseDataContract<AnotherClass> 
{
}

该方法只能用实现该基类型的实例调用,所以它就像是一种用接口(interface)标记类的形式。

关于c# - 无法理解 C# 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21149528/

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