我试着试着使用System.Object.operator ==().
我的有效C#书和这里的页面(http://www.srtsolutions.com/just-what-is-the-default-equals-behavior-in-c-how-does-it-relate-to-gethashcode) ,说:
"System.Object.operator ==()将调用a.Equals(b)来确定a和b是否相等".
所以用我的代码:
object a = 1;
object b = 1;
if(object.Equals(a, b))
{
// Will get here because it calls Int32.Equals(). I understand this.
}
if(a == b)
{
// I expected it to get here, but it doesn't.
}
Run Code Online (Sandbox Code Playgroud)
我期望(a == b)调用Int32的覆盖Equals并以与static objet.Equals()相同的方式比较值.我错过了什么?
编辑:我或许应该补充一点,我可以看到(a == b)正在测试 - 它正在测试参考相等性.我被这本书抛出,似乎暗示它将在内部工作,就像静态对象一样.Equals(obect,object)会.
我刚刚参加了IKM C#测试.其中一个问题是:
以下哪项改进了C#程序的性能?
最后我跳过了这个问题,我能看到的唯一可能的答案是E.在某些情况下,值类型可以提供更好的性能(对于小类型:不需要解除引用而不在托管堆上[假设不是引用类型的成员] ]),但当然并非总是如此.
我正在尝试将数据添加到数据网格(实际上,任何在网格中显示数据的控件都会这样做),但是直到运行时才知道列(名称和数字).
我知道如何创建的列:例如
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = column.DisplayName;
MyDataGrid.Columns.Add(textColumn);
Run Code Online (Sandbox Code Playgroud)
但是我该如何添加行?我没有看到如何使用绑定,因为我的数据不包含在具有已知属性的对象中.例如,每行的数据可能以字符串[]形式出现.所以有一次我可能有三列,另一次我可能有五列.
我原以为能做这样的事情:
// Example data to represent a single row.
string[] row1 = new[] { "value1", "value2", "value3" };
var row = new Row;
row.AddCell(row1[0]);
row.AddCell(row1[1]);
row.AddCell(row1[2]);
MyDataGrid.Rows.Add(row);
Run Code Online (Sandbox Code Playgroud) 在这里做一点测试.只有这两个文本框中的第一个显示值"123".为什么不是第二个?
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
Title="MainWindow" Height="350" Width="525">
<StackPanel Width="123" x:Name="Panel1">
<TextBox Text="{Binding ElementName=Panel1, Path=Width, diag:PresentationTraceSources.TraceLevel=High}"></TextBox>
<TextBox Text="{Binding Source={RelativeSource AncestorType={x:Type StackPanel}}, Path=Width, diag:PresentationTraceSources.TraceLevel=High}"></TextBox>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)