首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在C#中的方法中定义本地结构?

是否可以在C#中的方法中定义本地结构?
EN

Stack Overflow用户
提问于 2010-11-17 23:22:32
回答 9查看 41.4K关注 0票数 47

一种常见的编程最佳实践是“将变量定义为尽可能接近它们的使用位置”。

我经常使用结构来创建代码,这些代码在某些地方几乎是自文档化的。但是,C#强制我在方法外部定义结构。这打破了前面提到的最佳实践-它基本上为整个类创建了一个不需要的全局变量类型。

是否可以像定义局部变量一样在方法中定义局部结构,如果不能,您能给我一个窗口,让我了解C#设计者决定阻止这种情况的原因吗?

用例

我正在将电子表格的一部分转换为C#代码。我想在方法中使用局部结构,以有组织的方式存储临时信息,而不必求助于数百个独立的变量,这些变量在作用域中是全局的。

更新2016-8月: C# 7.0可能具有此功能!

很明显,从2016年8月开始,这将是C# 7.0中的一个功能。

所以C#编译器团队同意了--哇!

更新2020-7月:现在由C#和C++支持

C++一直完全支持这一点。真是太棒了。

C# 7.0现在具有用于具有命名字段的轻量级数据结构的值元组。请参见来自Ghost4Mananswer

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-11-17 23:25:46

我认为在一个方法中定义命名类型是不允许的。至于原因,我不得不猜测。如果一个类型不打算在外部使用,那么它的存在可能是不合理的。

但是,您可以在方法中定义匿名类型变量。它在某种程度上类似于结构。一个折衷方案。

代码语言:javascript
复制
public void SomeMethod ()
{
    var anonymousTypeVar = new { x = 5, y = 10 };
}
票数 29
EN

Stack Overflow用户

发布于 2011-09-07 05:24:43

虽然有点晚,但这是我对列表的解决方案--使用匿名变量作为方法内部的结构:

代码语言:javascript
复制
var list = new[] { new { sn = "a1", sd = "b1" } }.ToList(); // declaring structure
list.Clear();                                               // clearing dummy element
list.Add(new { sn="a", sd="b"});                            // adding real element
foreach (var leaf in list) if (leaf.sn == "a") break;       // using it

匿名元素(sn和sd)是只读的。

票数 12
EN

Stack Overflow用户

发布于 2010-11-17 23:29:27

你可以使用anonymous types来做这样的事情。MSDN示例如下:

代码语言:javascript
复制
var v = new { Amount = 108, Message = "Hello" };

代码语言:javascript
复制
var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4205907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档