为什么把东西放在元组中只是为了立即把它们取出来呢?
本文关键字:元组 为什么 | 更新日期: 2023-09-27 18:07:03
我在。net框架的很多地方都看到过这种情况。不幸的是,我不记得其他的,但他们都在武士刀的源代码程序集。
Stuff被放入元组中,并立即在相同的方法中删除/读回。这对我来说没有任何意义。
我理解它的用途(也是通过阅读维基百科关于这个主题的条目,以及多年前研究关系数据时学到的含义)。只是这种特殊的行为对我来说没有多大意义。
public AuthenticationResponseChallenge AuthenticationResponseChallenge
{
get
{
Tuple<string[], IDictionary<string, string>> challengeEntry = this.ChallengeEntry;
if (challengeEntry == null)
{
return null;
}
return new AuthenticationResponseChallenge(challengeEntry.Item1, new AuthenticationProperties(challengeEntry.Item2));
}
set
{
if (value == null)
{
this.ChallengeEntry = null;
return;
}
this.ChallengeEntry = Tuple.Create<string[], IDictionary<string, string>>(value.AuthenticationTypes, value.Properties.Dictionary);
}
}
好的,抱歉,坏例子。我工作太久了。我需要一个例子来说明我的观点。不幸的是,我从早上开始翻找了太多东西,我记不起来了,等我有空的时候再回来。
这样,当set/return元组发生变化时,原始元组this.ChallengeEntry
不会改变。
在此过程中,它保留对元组中原始项的引用,而不是对元组本身的引用。
在您提供的示例中,您有两个一起工作的属性:AuthenticationResponseChallenge
和ChallengeEntry
。它们都可以在任何时候访问,但值必须相似。
AuthenticationResponseChallenge
由ChallengeEntry
计算得出。
我不能回答为什么任何库的作者做出他们所做的设计决定。我可以说,当你需要将任意数量的值关联在一起时,内置的Tuple
对于临时存储是很方便的,而且你不需要字典的语义。
在这个特殊的例子中,我个人会做两件事中的一件:
- 创建我自己的结构/对象,为成员元素和
ToAuthenticationResponseChallenge()
转换方法和一个接受AuthenticationResponseChallenge
对象的构造函数命名。 - 创建一个扩展方法或函数来完成转换。