我遇到过这段代码:
var rectangle = new Rectangle(420, 69);
var newOne = rectangle with { Width = 420 }
Run Code Online (Sandbox Code Playgroud)
我想知道withC# 代码中的关键字。它是做什么用的?以及如何使用它?它给语言带来了什么好处?
我有一个接口,以及两个实现接口的类.这些类具有泛型类型.我想从一个类的实例克隆到另一个类.
interface IFoo
{
// stuff
}
class Foo<T> : IFoo
{
// foo stuff
// ifoo implementation
}
class Bar<T> : IFoo
{
// bar stuff
// ifoo implementation
}
Run Code Online (Sandbox Code Playgroud)
我有一个Foo,想要一个酒吧.Bar有一个复制构造函数,它带有IFoo的参数.我创建了一个扩展方法来实现克隆:
public static Bar<T> Clone<T>(this IFoo foo)
{
return new Bar<T>(foo);
}
Run Code Online (Sandbox Code Playgroud)
调用该方法需要以下类型:
someFoo.Clone<T> ...
Run Code Online (Sandbox Code Playgroud)
有没有办法在通过修改扩展方法或任何其他方式调用方法时省略声明类型,以允许实例只是传入而不关心它的底层类型?
更新 以下是如何使用它来更好地说明情况.
在一个方法中,我迭代一个集合并返回一个IFoo的枚举.在方法中,我查看源集合的属性并确定Foo的类型.
IFoo foo = null;
string type = element.Attribute("Type").Value;
switch (type)
{
case "int":
foo = new Foo<int>();
break;
case "string":
foo = new Foo<string>();
break;
// etc
}
// other …Run Code Online (Sandbox Code Playgroud) 我想将一个对象复制到另一个对象,并复制具有相同名称和类型的字段。也许使用反射。
例如
object1.Name = object2.Name; object1.Age = object2.Age;
但是,如果object2.Address不在object1中,则将被忽略,反之亦然。
c# ×3
.net ×1
c#-9.0 ×1
clone ×1
expression ×1
generics ×1
interface ×1
keyword ×1
object ×1
reflection ×1