在C#中,我注意到如果我在LINQ生成的IEnumerable<T>集合上运行foreach循环并尝试修改每个T元素的内容,我的修改就不会持久.
另一方面,如果我在创建集合时应用ToArray()or ToList()方法,则对foreach循环中各个元素的修改是持久的.
我怀疑这在某种程度上与延迟执行有关,但究竟对我来说并不完全是显而易见的.我真的很感激这种行为差异的解释.
这是一些示例代码 - 我有一个MyClass带有构造函数和自动实现属性的类:
public class MyClass
{
public MyClass(int val) { Str = val.ToString(); }
public string Str { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的示例应用程序中,我使用LINQ 基于一个整数Select()集合创建两个MyClass对象集合,一个IEnumerable<MyClass>和一个最后IList<MyClass>应用该ToList()方法.
var ints = Enumerable.Range(1, 10);
var myClassEnumerable = ints.Select(i => new MyClass(i));
var myClassArray = ints.Select(i => new MyClass(i)).ToList();
Run Code Online (Sandbox Code Playgroud)
接下来,我在每个集合上运行一个foreach循环,并修改循环MyClass对象的内容:
foreach (var obj in myClassEnumerable) obj.Str …Run Code Online (Sandbox Code Playgroud) 我已经在我的Windows 7系统上安装了Mono(版本2.11.4),现在我打算安装MonoDevelop(版本3.0.4.7).但是,当我启动MonoDevelop安装程序时,我收到以下错误消息,并且安装已终止:

好的,这可以通过从这里获取Gtk#安装程序来轻松解决.但是,Mono安装已经包含了Gtk#2.12.11,所以它似乎也是一个不必要的步骤,也可以单独安装Gtk#.
当Mono包含Gtk#时,是否有任何方法可以指示MonoDevelop安装程序(另外)在Mono安装目录中查找所需的Gtk#文件?
更新我尝试为Gtk#安装"虚拟"注册表设置,将Mono根目录指定为Gtk#安装文件夹.这允许我安装MonoDevelop而无需单独安装Gtk#,但之后我无法运行 MonoDevelop ...
我有一个静态容器类,它包含一些类的句柄A:
public static class Container
{
private static A _a;
public static void Register(A a) { _a = a; }
public static void Run() { _a.DoIt(); }
}
Run Code Online (Sandbox Code Playgroud)
容器A实例的注册在A构造函数中执行:
public class A
{
public A() { Container.Register(this); }
public void DoIt() { Console.WriteLine("Running!"); }
}
Run Code Online (Sandbox Code Playgroud)
现在,假设我A通过调用仅包含A实例化的方法来注册我的实例:
public void Init() { var a = new A(); }
Run Code Online (Sandbox Code Playgroud)
从理论上说,可以编译优化忽略这个任务,或者我可以100%肯定这A是永远当我打电话实例化的Init方法?
示例当我运行以下代码时:
Init();
...
Container.Run();
Run Code Online (Sandbox Code Playgroud)
将Container._a …
根据公认的答案,这个 StackOverflow的问题,存在的差异System.Type.Equals方法和System.Type operator ==:
a runtime type (represented by the internal type RuntimeType), managed by
the CLR is not always the same as a Type, which can be extended. Equals
will check the underlying system type, whereas == will check the type itself.
Run Code Online (Sandbox Code Playgroud)
在.NET for Windows Store应用程序中,System.Type运算符==不可用.
我怎样才能完全再现的功能System.Type operator ==在Windows应用商店中的应用程序?或者,特定的相等运算符功能是否System.Type与Windows应用商店应用无关?
我们最近开始使用 WebDriver(支持 Selenium 1)来执行浏览器测试,使用 NUnit 框架。由于我们想在各种浏览器中运行测试,我们为每个浏览器定义了驱动程序,并在夹具设置期间将它们放在一个列表中:
[TestFixtureSetUp]
public void SetupTest()
{
// Load drivers
Drivers = new List<IWebDriver>
{
new ChromeDriver(),
...
};
Run Code Online (Sandbox Code Playgroud)
在每一个测试中,我们都像这样遍历列表:
[Test]
public void SomeTest()
{
foreach (var driver in Drivers)
{
driver.Navigate().GoToUrl("...");
...
Run Code Online (Sandbox Code Playgroud)
在所有的测试方法中都这样做感觉不对。测试方法不应该关心他们应该使用什么驱动程序。理想情况下,我们会有这样的事情:
public void SomeTest(IWebDriver driver)
{
driver.Navigate().GoToUrl("...");
...
Run Code Online (Sandbox Code Playgroud)
我们可以解决这个问题的一种方法是使用 TestCases:
[TestCase(new ChromeDriver())]
[TestCase(new FireFoxDriver())]
...
Run Code Online (Sandbox Code Playgroud)
但这是很多重复,并将正确初始化驱动程序的问题转移到每个测试的属性中。不是真正的收获。
有没有什么办法可以告诉 NUnit 框架执行整个测试套件并在每次运行时向单个测试注入不同的参数?或者有没有其他好的解决方案?
我正在寻找支持DICOM标准中列出的所有可能传输语法的DICOM库.它必须解码每个DICOM医学图像.GDCM库不支持所有这些...提前感谢
DCMTK看起来很棒,但是我必须在C#中使用它,在这种情况下这不是一件容易的事......你对mdcm库有所了解吗,它支持哪些传输语法?
我有一个Foo包含两个字段的类,其中Equals和GetHashCode方法已被覆盖:
public class Foo
{
private readonly int _x;
private readonly int _y;
public Foo(int x, int y) { _x = x; _y = y; }
public override bool Equals(object obj) {
Foo other = obj as Foo;
return other != null && _y == other._y;
}
public override int GetHashCode() { return _y; }
}
Run Code Online (Sandbox Code Playgroud)
如果我创建一个Foo:s数组并计算Distinct该数组的值的数量:
var array = new[] { new Foo(1, 1), new Foo(1, 2), new Foo(2, …Run Code Online (Sandbox Code Playgroud) 我在我的WPF应用程序中使用MVVMCross,我想在 GUI 中提供一个关闭(或退出)按钮来关闭整个应用程序。是否有使用MVVMCross功能的直接方法?
我已经尝试了以下方法MainViewModel:
public class MainViewModel : MvxViewModel
{
private MvxCommand _closeCommand;
public MvxCommand CloseCommand {
get {
return _closeCommand ?? (_closeCommand = new MvxCommand(DoClose));
}
}
public void DoClose() {
Close(this);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,无济于事。DoClose当我按下一个绑定到 的按钮时,该方法确实被调用CloseCommand,但是视图模型(和相应的视图)无法关闭,即使 WPFApp StartupUri设置为MainView.
是否有DataContractSerializer 可以处理的序列化/反序列化方案,而DataContractJsonSerializer 不能?
特别是,我正在考虑循环引用:这个MSDN页面解释了如何DataContractSerializer通过IsReference = true在DataContractAttribute构造函数中使用来管理循环引用.另一方面,DataContractAttribute.IsReference文档没有明确声明其适用性仅限于DataContractSerializer.
会不会DataContractJsonSerializer也兑现了IsReference财产?
.net c# json datacontractserializer datacontractjsonserializer
我想计算System.Collections.Generic.LinkedList中起始节点和结束节点之间的节点总数,类似于C++中的STL算法std :: count(除了我打算将末端节点包含在计数).
我无法弄清楚如何使用任何LINQ扩展方法来有效地计算这个数字,所以我已经实现了这样的计数器(不包括所有空值和一致性检查):
var counter = 1;
var node = iStartNode;
while (!ReferenceEquals(node, iEndNode))
{
node = node.Next;
++counter;
}
Run Code Online (Sandbox Code Playgroud)
但必须有一个更有效的解决方案,一定不是吗?任何建议都非常感谢.
I'm trying to generate dot product of two matrices using the below compiling command in Linux-GCC:
gcc -L / usr / lib64 / atlas -lblas code.c
这是似乎没有错误编译的代码:
#include < stdio.h>
int main()
{
int n,incx,incy;
int x[] = {1,2,3};
int y[] = {2,3,4};
int z;
incx =1;
incy =1;
n = 3;
z = sdot_(&n, x, &incx, y, &incy);
printf("%d", z);
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因此,我希望看到1 * 2 + 2 * 3 + 3 * 4 = 20,但是当我运行二进制文件时,将打印结果“ 3”。
有任何想法吗?
c# ×9
.net ×2
blas ×1
c ×1
dicom ×1
equality ×1
foreach ×1
fortran ×1
gcc ×1
gtk# ×1
ienumerable ×1
iequatable ×1
installer ×1
json ×1
linked-list ×1
linq ×1
mono ×1
monodevelop ×1
mvvmcross ×1
nunit ×1
reference ×1
system.type ×1
webdriver ×1
windows ×1
wpf ×1