C#中与Visual Basic关键字'With' ... 'End With'对应的是什么?

8 浏览
0 Comments

C#中与Visual Basic关键字'With' ... 'End With'对应的是什么?

在Visual Basic中,如果您要更改单个对象的多个属性,可以使用With/End With语句:

Dim myObject as Object
// ' Rather than writing:
myObject.property1 = something
myObject.property2 = something2
// ' You can write:
with myObject
   .property1 = something
   .property2 = something2
   ...
End With

我知道在C#中创建新对象时可以这样做:

Object myObject = new Object { property1 = something, property2 = something2, ...};

但是如果myOject已经被创建(就像Visual Basic所做的那样),我该如何做到这一点?

0
0 Comments

问题出现的原因是有人想要在C#中实现与Visual Basic关键字"With"和"End With"等效的功能,以便简化代码的书写。解决方法是使用对象别名来代替重复输入对象名称,并使用代码块的方式创建新的作用域。

以下是整理后的

在C#中,如果你想要避免大量的重复输入,你可以给对象取一个更短的名称:

var x = myObject;
x.property1 = something;
x.property2 = something2;

是的,如果你想要更进一步,你甚至可以使用代码块的方式来创建新的作用域:

using(var x = myObject) 
{
    x.property1 = something;
}

但是,这样做是非常糟糕的主意,因为它会在代码块结束时调用Dispose方法(对于未实现IDisposable接口的类型,甚至无法通过编译)。

哦,好主意。我的错。我只是以为它会销毁变量"x",但是由于它是一个引用,这可能是致命的 😛

如果你希望在完成后变量离开作用域,你可以简单地使用花括号将代码包围起来,从而创建一个新的作用域。

避免大量的重复输入,真的吗?有了我们强大的智能感知,这完全是可读性的问题了。

通过使用对象别名和代码块的方式来创建新的作用域,你可以在C#中实现与Visual Basic关键字"With"和"End With"等效的功能。这样可以简化代码的书写,提高可读性。但是要注意,使用using语句时要确保对象实现了IDisposable接口,以便在代码块结束时正确释放资源。

0
0 Comments

问题:如何用C#实现Visual Basic关键字'With' ... 'End With'的等效功能?

原因:在C#中没有与Visual Basic中的'With' ... 'End With'关键字完全等效的功能。这可能会导致代码编写时的冗余和重复。

解决方法:可以通过创建一个扩展方法来模拟'With' ... 'End With'关键字的功能。以下是一个示例代码:

static class Extension
{
    public static void With<T>(this T obj, Action<T> a)
    {
        a(obj);
    }    
}
class Program
{
    class Obj
    {
        public int Prop1 { get; set; }
        public int Prop2 { get; set; }
        public int Prop3 { get; set; }
        public int Prop4 { get; set; }
    }
    static void Main(string[] args)
    {
        var detailedName = new Obj();
        detailedName.With(o => {
            o.Prop1 = 1;
            o.Prop2 = 2;
            o.Prop3 = 3;
            o.Prop4 = 4;
        });
    }
}

上述代码中定义了一个名为Extension的静态类,其中包含一个名为With的扩展方法。该方法接受一个泛型参数T和一个Action参数a,将泛型对象传递给Action并执行其中的代码。

在Main方法中,我们创建了一个名为detailedName的Obj对象,并使用With方法来设置其属性值。通过将要执行的代码放在With方法的参数中,我们可以模拟Visual Basic中的'With' ... 'End With'关键字的功能。

注意:如果使用Cadenza库,可以获得一个具有完全相同实现的方法。具体代码可以在此链接中找到。

虽然C#中没有直接等效于Visual Basic中'With' ... 'End With'关键字的功能,但可以通过创建扩展方法来模拟其功能。这样可以减少代码的冗余和重复,提高代码的可读性和可维护性。

0
0 Comments

问题的原因是'C#'语言没有与'Visual Basic'关键字'With'...'End With'等效的功能。解决方法是在'C#'中可以使用对象初始化器来实现类似的功能。

以下是解决方法的代码示例:

var obj = new MyClass
{
    Property1 = value1,
    Property2 = value2,
    // more properties...
};

在上述示例中,通过对象初始化器可以一次性设置对象的多个属性值,从而达到简化代码的目的。

请注意,以上只是一种在'C#'中实现类似功能的方法,并不是完全等效于'Visual Basic'的'With'...'End With'语法。

0