标签: object-initializers

C#如何在匿名对象初始化时设置只读属性

在C#中,对象初始值设定项可以设置公共非只读字段和属性.

但是,对于匿名类型,属性是只读的.那么.NET如何在对象初始化上设置它们呢?

c# anonymous-types object-initializers

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

为什么这个错误的对象初始化用花括号甚至编译?

Whille为WPF/MVVM项目的集合创建了一些虚拟数据,我生成了以下错误代码,编译得很好,但在运行时抛出异常.

有一个嵌套的数据对象结构,我错误地只用花括号进行实例化(看起来像编写JavaScript确实会对大脑造成永久性损害).

using System.Collections.ObjectModel;

namespace testapp
{
    class Program
    {
        static void Main(string[] args)
        {
            var collection = new ObservableCollection<TopLevelDataObject>();
            collection.Add(new TopLevelDataObject{Nested = {Bar = 5}});         // NullReferenceException
        }

        class TopLevelDataObject
        {
            public NestedDataObject Nested { get; set; }
            public string Foo { get; set; }
        }

        class NestedDataObject
        {
            public double Bar { get; set; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么要编译?

如果我创建一个匿名类型,比如Nested = new {Bar = 5},我在编译期间收到错误消息(因此失败):

Cannot implicitly convert type '<anonymous type: int Bar>' to 'testapp.Program.NestedDataObject'
Run Code Online (Sandbox Code Playgroud)

为什么在省略 …

c# object-initializers curly-braces

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

将css类名传递给asp.mvc视图助手

在ASP.NET MVC视图助手中,您可以执行类似的操作

<%= Html.ActionLink("click me", "DoSomething", null, new { someAttribute = "a value" } )  %>
Run Code Online (Sandbox Code Playgroud)

这将产生以下HTML

<a href="DoSomething" someAttribute="a value">click me</a>
Run Code Online (Sandbox Code Playgroud)

我的问题是......如果我想设置"class"属性怎么办?

<%= Html.ActionLink("click me", "DoSomething", null, new { class = "a-class-name" } )  %>
Run Code Online (Sandbox Code Playgroud)

那将无法编译,因为"class"是一个保留字.

有解决方法吗?

c# asp.net-mvc html-helper object-initializers

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

内联定义和声明

好吧,我确定我错误地写了这个概念,但不管怎么说.

我知道你可以在CSharp中做到

el.AppendChild(new UISize(file, "TSize") { CX = 95, CY = 20 });
Run Code Online (Sandbox Code Playgroud)

它声明了一个临时的bucket变量,然后将关联属性值赋给变量.然后将其发送到XMLElement AppendChild方法.

  1. 这个设计概念叫什么?
  2. 什么是VB.Net的转换?

我尝试使用自己的在线工具,从C#< - > VB.Net获得90-95%的转换率.它在这种情况下失败了,所以需要提一下我要做的事情,将它从C#转换为VB.Net.

如果可能的话,我真的不想做一个带有赋值的变量的长声明.

c# vb.net object-initializers

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

当初始化程序多于数组大小时,行为是什么?

我想知道当初始化程序多于数组大小时会发生什么,例如:

int t[3] = { 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)

当然,我的编译器警告它.我期望未定义的行为,但我没有在C11标准中找到任何关于它的条款.那么,我错过了什么吗?

c arrays initialization object-initializers aggregate-initialization

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

Dictionary <string,string []>的C#对象初始化器应该是什么样的?

我试图声明一个值为字符串数组的字典.我怎样才能做到这一点?

我尝试了以下代码(不起作用):

Dictionary<string, string[]> NewDic = new Dictionary<string,string[]>
{
    {"Key_0", {"Value_0.0", "Value_0.1"}},
    {"Key_1", {"Value_1.0", "Value_1.1", "Value_1.2"}},
}
Run Code Online (Sandbox Code Playgroud)

c# dictionary object-initializers

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

使用单个变量进行匿名对象初始化

我发现找到了这样一条线:

var myObject = new MyClass { 42 };  
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以执行此类操作.文档说,如果你定义一个匿名类型,你必须使用一个对象初始化器"所以这很明显,但我无法找到任何关于大括号中的单独整数.

.net c# object-initializers

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

构造函数执行前的属性初始化

Position我正在使用对象初始值设定项来创建具有如下属性的对象:

var control = new HtmlTextbox(browser)
{
    Position = position;
};
Run Code Online (Sandbox Code Playgroud)

据我所知,它与以下内容相同:

var control = new HtmlTextbox(browser);
control.Position = position;
Run Code Online (Sandbox Code Playgroud)

但我想Position在我的构造函数方法中使用初始化属性。Position有没有办法在不提供作为构造函数参数的情况下做到这一点?

c# constructor object-initializers

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

如何初始化包含结构和简单元素混合的结构对象?

使用 VB.NET 2017,我声明了一个结构,它有两个成员,一个是结构,另一个是字符串,如下所示:

Structure InpFile
    Dim name As String
    Dim reader As StreamReader
    Dim lineIn As String
    Dim lineNum As Integer
End Structure

Structure Opts
    Dim fin As InpFile
    Dim name As String
End Structure
Run Code Online (Sandbox Code Playgroud)

如何Opts在声明时初始化类型对象?

例如,一种无效的尝试:

Dim obj as Opts = {.fin.name = "filename.txt", .fin.lineNum = 0, .name = "JohnnyMnemonic"}
Run Code Online (Sandbox Code Playgroud)

vb.net initialization object-initializers visual-studio-2017

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

在类声明和构造函数中初始化对象的区别

我正在为我的对象进行对象初始化和构造函数初始化,但无法得到我的问题的确切答复。这里Case1和Case2有什么区别;

情况1:

namespace ConsoleApplication2
{
    class MyBuilder
    {
        private MySynchronizer m_synchronizer = new MySynchronizer();

        public MyBuilder()
        {

        }

        public void ProcessRecord(int recordNumber)
        {
            m_synchronizer.Process(recordNumber);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

案例二:

namespace ConsoleApplication2
{
    class MyBuilder
    {
        private MySynchronizer m_synchronizer;

        public MyBuilder()
        {
          m_synchronizer = new MySynchronizer();

        }

        public void ProcessRecord(int recordNumber)
        {
            m_synchronizer.Process(recordNumber);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是示例代码,用于展示我如何调用我的 Builder 类;

 class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Press any key to stop");
            MyBuilder builder = new MyBuilder();
            builder.ProcessRecord(2);
        }
    }
Run Code Online (Sandbox Code Playgroud)

[对不起,如果我不能正确地重新表述这个问题,在这种情况下,任何人都可以提供指向其他 SO …

c# oop constructor object-initializers

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