我正在编写一个生成DataTable的方法,将数据源作为通用的IEnumerable.如果没有值,我试图在字段上设置默认值,代码如下:
private void createTable<T>(IEnumerable<T> MyCollection, DataTable tabela)
{
Type tipo = typeof(T);
foreach (var item in tipo.GetFields() )
{
tabela.Columns.Add(new DataColumn(item.Name, item.FieldType));
}
foreach (Pessoa recordOnEnumerable in ListaPessoa.listaPessoas)
{
DataRow linha = tabela.NewRow();
foreach (FieldInfo itemField in tipo.GetFields())
{
Type typeAux = itemField.GetType();
linha[itemField.Name] =
itemField.GetValue(recordOnEnumerable) ?? default(typeAux);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它抛出了这个错误:
找不到类型或命名空间名称'typeAux'(您是否缺少using指令或程序集引用?)
为什么?"Default(Type)"函数不应该返回该类型的默认值吗?
希望能够填充对象的任何属性并在集合中搜索与给定属性匹配的对象.
class Program
{
static List<Marble> marbles = new List<Marble> {
new Marble {Color = "Red", Size = 3},
new Marble {Color = "Green", Size = 4},
new Marble {Color = "Black", Size = 6}
};
static void Main()
{
var search1 = new Marble { Color = "Green" };
var search2 = new Marble { Size = 6 };
var results = SearchMarbles(search1);
}
public static IEnumerable<Marble> SearchMarbles(Marble search)
{
var results = from marble in marbles
//where ??? …Run Code Online (Sandbox Code Playgroud) 再见,
我对这个问题很沮丧,我创建了一个简单的类,如下所示:
public class Classe
{
public int Intero { get; set; }
public Int32 Intero32 { get; set; }
public double Double { get; set; }
public string Stringa { get; set; }
public Classe PerReferenza { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我编写了这个扩展方法,其目标是返回属性的引用默认值(引用的类型或值类型):
public static class TypeExtensions
{
public static object GetDefaultValue(this Type t)
{
if (t.IsValueType)
return Activator.CreateInstance(t);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
按照我的主要方法:
static void Main(string[] args)
{
Classe c = new Classe();
foreach (var …Run Code Online (Sandbox Code Playgroud) 一些代码:
foreach (System.Reflection.PropertyInfo pi in myObject.GetType().GetProperties())
{
if (pi.CanWrite)
{
object value = pi.GetValue(Properties, null);
// if (value is not default)
// {
X.addAttribute(pi.Name, value);
// }
}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是,如果属性处于其 DefaultValue,则不调用“X.addAttribute...”行。我假设有某种方法可以获取属性的 DefaultValue,以便我可以进行比较?
出于我的目的,我试图获取由 DefaultValueAttribute 定义的“默认”值。
任何帮助表示赞赏,干杯。
可能重复:
C#-默认值(类型)的编程等效项
我可以使用Type类(或其他地方)中的方法或属性来查找default(T)的值吗?
我是动态返回一个类型的默认值,但我不能将default关键字传递给Type类型的变量.
为什么不?
例如:
private object GetSpecialDefaultValue(Type theType)
{
if (theType == typeof (string))
{
return String.Empty;
}
if (theType == typeof (int))
{
return 1;
}
return default(theType);
}
Run Code Online (Sandbox Code Playgroud)
给我编译时错误:
找不到类型或命名空间名称'theType'(您是否缺少using指令或程序集引用?)
我想获取字段类型的默认值。我希望有类似以下代码的内容(当然不会编译):
public class foo
{
public int intf;
public string strf;
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(default(foo.intf)); //Expected default(int)
Console.WriteLine(default(foo.strf)); //Expected default(string)
}
}
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
c# ×7
.net ×1
.net-core ×1
default ×1
generics ×1
linq ×1
list ×1
propertyinfo ×1
reflection ×1
types ×1