我一直在使用C#很长时间但从未意识到以下情况:
public static void Main()
{
for (int i = 0; i < 5; i++)
{
}
int i = 4; //cannot declare as 'i' is declared in child scope
int A = i; //cannot assign as 'i' does not exist in this context
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么我不能在for块之外使用'i'的值,如果它不允许我声明一个带有这个名字的变量?
我认为for循环使用的迭代器变量仅在其范围内有效.
根据Microsoft的文档,read-host
让用户输入一些输入,然后按Enter继续.如果您想要"按任意键继续",则行为不正确.(等等...... Any钥匙在哪里?!)
有没有办法实现这个目标?有点像read-char
?
我已经尝试搜索"单字符输入"和"powershell输入",看看我是否能找到所有获取输入的方法列表而没有太多运气.这看起来希望使用一些堆栈溢出问题read-host
不实际的工作"按任意键..."功能.
注意这不是关于如何在C#中实现或模拟duck typing的问题...
几年来,我的印象是某些C#语言特性对语言本身定义的数据结构感到沮丧(这对我来说似乎总是一个奇怪的鸡蛋和鸡蛋场景).例如,我的印象是foreach
循环只能用于实现的类型IEnumerable
.
从那时起,我开始明白C#编译器使用duck typing来确定是否可以在foreach循环中使用对象,GetEnumerator
而不是查找方法IEnumerable
.这很有意义,因为它消除了鸡蛋和鸡蛋的难题.
我有点困惑,为什么这不是using
块的情况似乎并非如此IDisposable
.是否有任何特殊原因编译器不能使用duck typing并查找Dispose
方法?造成这种不一致的原因是什么?
或许还有其他东西在IDisposable的引擎盖下进行?
讨论为什么你会永远有未实现IDisposable是这个问题的范围之外的Dispose方法的对象:)
特别是错误发生在Resources.Designer.cs
:
错误2名称空间'ModulusFE'已包含'StockChartX'的定义Resources.Designer.cs 11 21 ModulusFE.StockChartX
我用谷歌搜索了这个并且仍然很困惑.有谁知道我可能尝试的任何事情?
我尝试过重建和清理,以及重命名Resources.Designer.cs
文件,希望它能重建,但没有运气.
代码的顶部说:
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.225
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
Run Code Online (Sandbox Code Playgroud)
任何想法都将不胜感激.
我想使用Python在本地计算机的网络浏览器(Chrome或Internet Explorer)中打开一个网站.
open("http://google.co.kr") # something like this
Run Code Online (Sandbox Code Playgroud)
有没有可以为我做这个的模块?
我想用我的Java应用程序用当前时间戳命名新文件.
我需要帮助.如何命名使用当前时间戳创建的新文件?我应该包括哪些课程?
获取RichTextBox中的文本后,我想清除文本.我怎样才能做到这一点?
TextRange txt = new TextRange(richtxtSNotice.Document.ContentStart, richtxtSNotice.Document.ContentEnd);
MessageBox.Show(txt.Text);
Run Code Online (Sandbox Code Playgroud) 我总是想尝试使用,TransactionScope
但我无法弄清楚人们对它的看法是否有用.让我们举一个例子:
using(TransactionScope tran = new TransactionScope()) {
CallAMethodThatDoesSomeWork1();
CallAMethodThatDoesSomeWork2();
tran.Complete();
}
Run Code Online (Sandbox Code Playgroud)
所以最基本的问题是:我如何编写" CallAMethodThatDoesSomeWork1()
"以便它知道如果让我们说" CallAMethodThatDoesSomeWork2()
"抛出异常会如何推回其行为?
在python我们可以......
a = 5
if a == 5:
pass #Do Nothing
else:
print "Hello World"
Run Code Online (Sandbox Code Playgroud)
在C#中有类似的方法吗?
我想知道在第二个列表中是否可以找到第一个列表中的至少一个元素.
我可以看到两种方法.假设我们的列表是:
List<string> list1 = new[] { "A", "C", "F", "H", "I" };
List<string> list2 = new[] { "B", "D", "F", "G", "I" };
Run Code Online (Sandbox Code Playgroud)
第一种方法使用循环:
bool isFound = false;
foreach (item1 in list1)
{
if (list2.Contains(item1))
{
isFound = true;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
第二个直接使用Linq:
bool isFound = list1.Intersect(list2).Any();
Run Code Online (Sandbox Code Playgroud)
第一个是写的很长,而不是非常直接/易于阅读.第二个是短而清晰的,但表现很低,特别是在大型名单上.
这可能是一种优雅的方式吗?
c# ×7
python ×2
.net ×1
duck-typing ×1
idisposable ×1
java ×1
linq ×1
performance ×1
powershell ×1
scope ×1
timestamp ×1
variables ×1
vb.net ×1
wpf ×1