C#기본 범용+반사 조합 활용
4450 단어 C#
제목과 같다.
목적:
두 가지 예를 완성해야 한다.
1. 반사 가범형을 이용하여 실체류의 속성의 값을 판단하는 상황
2. 반사 범용을 이용하여 DataTatale를 List로 변환하고 List에서 집합된 데이터 값을 판단한다
준비:
콘솔 프로그램 만들기;
Temp 클래스 만들기;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Temp
{
public bool A { get; set; }
public bool B { get; set; }
public bool C { get; set; }
public bool D { get; set; }
}
}
예가 기초적이어서 방법이 따로 만들어지지 않았어요.
작성 시작
1. 반사 가범형을 이용하여 실체류의 속성의 값을 판단하는 상황
현재 Temp 클래스의 속성 값에 False가 있는지 확인해야 합니다.
반사되지 않는 방법으로 작성된 내용은 다음과 같습니다.
if (temp.A && temp.B && temp.C && temp.D)
{
return true;
}
else
{
return false;
}
이렇게 작성한 결합성이 너무 높아서, 만약 필드가 많거나 필드를 추가해야 할 때 이 코드를 수정해야 한다면 확장에 불리하다
반사와 범용의 방법으로 고치다
public static bool IsAllTrue(T obj) where T:class
{
Type t = typeof(T); // T
PropertyInfo[] Proper = t.GetProperties();// , T
foreach (var item in Proper)
{
bool bol = (bool)item.GetValue(obj,null);//
if (!bol)
{
return false;
}
}
return true;
}
호출 방법
Temp temp = new Temp()
{
A = true,
B = true,
C = false,
D = true
};
Console.WriteLine(IsAllTrue(temp).ToString());
Console.Read();
이렇게 작성하는 장점은 한 종류에만 국한되지 않고 여러 종류를 판단할 수 있으며 후기에 속성을 추가하면 다시 코드를 바꾸지 않아도 되고 코드의 확장성을 높일 수 있다는 것이다.
2. 반사 범용을 이용하여 DataTatale를 List로 변환하고 List에서 집합된 데이터 값을 판단한다
실제 개발에서는 DataTable를 List 또는 List를 dataTable로 변환하는 경우가 많습니다.
우리 는 일반적 인 방법 을 하나 더 편찬한다
public static IList DataTableToList(DataTable dt) where T : new()
{
//1. List
IList list = new List();
string TempName = "";
foreach (DataRow ds in dt.Rows)
{
T t = new T(); //
PropertyInfo[] Porp = t.GetType().GetProperties(); //
foreach (PropertyInfo item in Porp)
{
TempName = item.Name;
if (dt.Columns.Contains(TempName))
{
if (!item.CanWrite) continue;
object value = ds[TempName]; // DataRow
if (value != DBNull.Value)
{
item.SetValue(t, value, null); //
}
}
}
list.Add(t);// List
}
return list;
}
호출 방법
Temp temp = new Temp()
{
A = true,
B = true,
C = false,
D = true
};
Console.WriteLine(IsAllTrue(temp).ToString());
DataTable dt = new DataTable();// DataTable
dt.Columns.Add("A", typeof(bool));
dt.Columns.Add("B", typeof(bool));
dt.Columns.Add("C", typeof(bool));
dt.Columns.Add("D", typeof(bool));
dt.Rows.Add(new object[] { true, true, false, true });
dt.Rows.Add(new object[] { true, true, true, true });
dt.Rows.Add(new object[] { true, true, true, true });
dt.Rows.Add(new object[] { true, true, false, true });
IList LTemp = DataTableToList(dt);// List
int i = 1;
foreach (Temp item in LTemp)
{
bool isbol = IsAllTrue(item);// ( , DataTable Rows , )
if (!isbol)
{
Console.WriteLine(" {0} False", i);
}
i++;
}
Console.Read();
총괄: 범형과 반사는 C#프로그래밍에서 없어서는 안 된다. 위의 두 가지 예는 간단하게 범형과 반사를 사용할 뿐이다. 범형과 반사의 작용은 매우 크다. 반사와 범형은 C#프로그래밍에서 어디에나 있다고 할 수 있다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.