小编And*_*son的帖子

关于IEnumerable与List的C#foreach - 仅针对数组的元素修改 - 为什么?

在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)

c# ienumerable foreach reference

3
推荐指数
1
解决办法
3510
查看次数

在Windows上安装MonoDevelop:Gtk#要求的解决方法?

我已经在我的Windows 7系统上安装了Mono(版本2.11.4),现在我打算安装MonoDevelop(版本3.0.4.7).但是,当我启动MonoDevelop安装程序时,我收到以下错误消息,并且安装已终止:

MonoDevelop安装错误

好的,这可以通过从这里获取Gtk#安装程序来轻松解决.但是,Mono安装已经包含了Gtk#2.12.11,所以它似乎也是一个不必要的步骤,也可以单独安装Gtk#.

Mono包含Gtk#时,是否有任何方法可以指示MonoDevelop安装程序(另外)在Mono安装目录中查找所需的Gtk#文件?

更新我尝试为Gtk#安装"虚拟"注册表设置,将Mono根目录指定为Gtk#安装文件夹.这允许我安装MonoDevelop而无需单独安装Gtk#,但之后我无法运行 MonoDevelop ...

windows mono installer gtk# monodevelop

3
推荐指数
1
解决办法
2400
查看次数

是否总是执行局部变量赋值,即使变量未使用?

我有一个静态容器类,它包含一些类的句柄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 …

c# variable-assignment compiler-optimization

3
推荐指数
1
解决办法
149
查看次数

.NET Windows应用商店应用和System.Type - 相当于运营商==?

根据公认的答案,这个 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.TypeWindows应用商店应用无关?

.net c# equality system.type windows-store-apps

3
推荐指数
1
解决办法
177
查看次数

在多个驱动程序上运行 WebDriver NUnit 测试

我们最近开始使用 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 框架执行整个测试套件并在每次运行时向单个测试注入不同的参数?或者有没有其他好的解决方案?

c# nunit webdriver

2
推荐指数
1
解决办法
5763
查看次数

DICOM库 - 支持所有DICOM传输语法

我正在寻找支持DICOM标准中列出的所有可能传输语法的DICOM库.它必须解码每个DICOM医学图像.GDCM库不支持所有这些...提前感谢


DCMTK看起来很棒,但是我必须在C#中使用它,在这种情况下这不是一件容易的事......你对mdcm库有所了解吗,它支持哪些传输语法?

c# dicom

2
推荐指数
1
解决办法
4794
查看次数

LINQ Distinct 与 EqualityComparer&lt;T&gt;.Default:IEquatable&lt;T&gt; 实现被忽略?

我有一个Foo包含两个字段的类,其中EqualsGetHashCode方法已被覆盖:

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)

c# linq iequatable

2
推荐指数
1
解决办法
2754
查看次数

如何在 MVMCross WPF 应用程序中实现关闭按钮?

我在我的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.

c# wpf mvvmcross

2
推荐指数
1
解决办法
2508
查看次数

DataContractJsonSerializer可以处理循环引用吗?

是否有DataContractSerializer 可以处理的序列化/反序列化方案,而DataContractJsonSerializer 不能

特别是,我正在考虑循环引用:这个MSDN页面解释了如何DataContractSerializer通过IsReference = trueDataContractAttribute构造函数中使用来管理循环引用.另一方面,DataContractAttribute.IsReference文档没有明确声明其适用性仅限于DataContractSerializer.

会不会DataContractJsonSerializer也兑现了IsReference财产?

.net c# json datacontractserializer datacontractjsonserializer

2
推荐指数
1
解决办法
1450
查看次数

C#:计算LinkedList中节点之间的元素数

我想计算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)

但必须有一个更有效的解决方案,一定不是吗?任何建议都非常感谢.

c# linked-list

0
推荐指数
1
解决办法
1683
查看次数

BLAS sdot_ function returns unexpected result

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 gcc fortran blas

-2
推荐指数
1
解决办法
141
查看次数