public class Kitten
{
public string Ears = "NotSet";
public string Fur = "NotSet";
}
public class Cage
{
Kitten _kitten;
public Cage(Kitten Akitten)
{
}
public Kitten Kitten
{
get
{
return _kitten;
}
set
{
_kitten = value;
}
}
public string EchoKittenProperty(string PropName)
{
return PropName;
}
}
Есть ли способ получить доступ к новому классу и плюнуть его в метод inline?
Это просто:
var cg = new Cage( new Kitten(){ Ears = "Pointy", Fur = "Fluffy" });
var value = cg.EchoKittenProperty(cg.Kitten.Fur);
//value = "Fluffy"
Но как мне это сделать? :
var value = new Cage( new Kitten(){ Ears = "Pointy", Fur = "Fluffy" }).EchoKittenProperty(this.Kitten.Fur);
//value = "Fluffy"
Это тестовый класс:
public static class Test
{
public static void Test1()
{
var cg = new Cage( new Kitten(){ Ears = "Pointy", Fur = "Fluffy" });
var value = cg.EchoKittenProperty(cg.Kitten.Fur);
//value = "Fluffy"
}
public static void Test2()
{
//"this" is illegal here, but I want to get "this" to refer to the new Cage class
var value = new Cage( new Kitten(){ Ears = "Pointy", Fur = "Fluffy"}).EchoKittenProperty(this.Kitten.Fur);
//value = "Fluffy"
}
}
Есть ли способ ссылаться на новый объект в методе EchoKittenProperty, не помещая его в переменную и не ссылаясь на него после?
Я думаю, что-то вроде этого позволяет вам связать методы в цепочку и получить доступ к экземпляру :
public class Cage
{
public Cage EchoKittenProperty(Func<Cage, Cage> projection)
{
return projection(this);
}
Kitten _kitten;
public Cage(Kitten Akitten)
{
}
public Kitten Kitten
{
get
{
return _kitten;
}
set
{
_kitten = value;
}
}
public Tuple<string,string> GetKittenInfo()
{
return new Tuple<string, string>(this.Kitten.Fur, this.Kitten.Ears);
}
}
Теперь вы можете цепляться без удержания котенка как переменная вне класса.
var KittenInfo = new Cage(new Kitten(){ })
.EchoKittenProperty(i =>
{
i.Kitten.Ears = "Pointy";
return i;
}
)
.EchoKittenProperty( i =>
{
i.Kitten.Fur = "Fluffy";
return i;
}
)
.GetKittenInfo();
Вот что вы можете сделать с dbextensions и dapper:
List<Customer> Customers = SQLHelper.Select<Customer>(new Customer())
.Chain(x=> x.AddWhere(new MysqlWhere(nameof(x.Item.CustomerID), 25, MysqlWhere.OperatorEnum.Equals)))
.SelectAllWhere();
Мы хотели получить доступ к generi c с помощью цепочка, чтобы мы могли получить строго типизированные свойства.
Некоторое время использовал EF с Mysql, но в целом он не работает. Хотя выбор в EF намного проще при использовании методов Fluent.