Сообщение Re: Обнулить свойство от 28.04.2023 9:19
Изменено 28.04.2023 9:32 kov_serg
Re: Обнулить свойство
Здравствуйте, vaa, Вы писали:
vaa>SetNull принимает поля, но не св-ва или индексаторы.
vaa>Возможно ли что-то похожее для св-в чтобы сократить кол-во ифчиков?
vaa>
vaa>SetNull принимает поля, но не св-ва или индексаторы.
vaa>Возможно ли что-то похожее для св-в чтобы сократить кол-во ифчиков?
vaa>
vaa>class A
vaa>{
vaa> public string Name {get;set;}
vaa>}
vaa>void SetNull(ref string v) => if (v == "") v = null;
vaa>SetNull(ref a.Name);
vaa>
using System;
class A {
public string Name { get; set; }
}
class App {
static void SetNull(ref string v) { if (v == "") v = null; }
static void SetNull(Func<string> get, Action<string> set) { if (get() == "") set(null); }
static void SetNull<T>(T t, string name, params object[] index) {
var prop = typeof(T).GetProperty(name);
SetNull(
()=> (string)prop.GetValue(t, index),
v => prop.SetValue(t, v, index)
);
}
static void Main(string[] args) {
string Name = "";
SetNull(ref Name);
var a = new A() { Name = "" };
SetNull(() => a.Name, v => a.Name = v);
SetNull(a,"Name");
}
}
Re: Обнулить свойство
Здравствуйте, vaa, Вы писали:
vaa>SetNull принимает поля, но не св-ва или индексаторы.
vaa>Возможно ли что-то похожее для св-в чтобы сократить кол-во ифчиков?
vaa>
vaa>SetNull принимает поля, но не св-ва или индексаторы.
vaa>Возможно ли что-то похожее для св-в чтобы сократить кол-во ифчиков?
vaa>
vaa>class A
vaa>{
vaa> public string Name {get;set;}
vaa>}
vaa>void SetNull(ref string v) => if (v == "") v = null;
vaa>SetNull(ref a.Name);
vaa>
using System;
class A {
public string Name { get; set; }
}
public class Ref<T> {
public Func<T> get { get; private set; }
public Action<T> set { get; private set; }
Ref(Func<T> get, Action<T> set) { this.get = get; this.set = set; }
public static Ref<T> propery<Y>(Y y, string name, params object[] index) {
var p = typeof(Y).GetProperty(name);
return new Ref<T>( () => (T)p.GetValue(y, index), v => p.SetValue(y, v, index) );
}
}
class App {
static void SetNull(ref string v) { if (v == "") v = null; }
static void SetNull(Ref<string> v) { if (v.get() == "") v.set(null); }
static void Main(string[] args) {
string Name = "";
var a = new A() { Name = "" };
SetNull(ref Name);
SetNull(Ref<string>.propery(a, "Name"));
}
}