이것을 사용하여 데이터를 직렬화 / 역 직렬화하고 있습니다.
public static T ReadFile<T>(string path, string fileName, SaveFormat saveFormat)
{
fileName = fileName.CaseInsensitiveContains(".") ? fileName : fileName + "." + saveFormat.ToString();
FullFileName = Path.Combine(path, fileName);
if (!File.Exists(FullFileName))
{
Debug.Print(FullFileName + " does not exist...");
return default;
}
switch (saveFormat)
{
case SaveFormat.BIN:
return ReadFromBinaryFile<T>(FullFileName);
case SaveFormat.JSON:
return ReadFromJsonFile<T>(FullFileName);
case SaveFormat.XML:
return ReadFromXmlFile<T>(FullFileName);
default:
return default;
}
}
사용 예 :
DataEx1 = FileOps.ReadFile<MyCustomClass>(folderName, fileName, saveFormat);
DataEx2 = FileOps.ReadFile<Float[][]>(folderName, fileName, saveFormat);
작동하지만 확장 방법으로 사용하고 항상 이전에 변수를 선언하므로 데이터 유형을 지정할 필요가 없습니다. 가능합니까?
float[][] data;
data.ReadFromFile(folderName, fileName, saveFormat);
나는 시도했다 :
public static T LoadFromFile1<T>(this T data, string path, string fileName, FileOps.SaveFormat saveformat = FileOps.SaveFormat.JSON)
{
return FileOps.ReadFile<T>(path, fileName, saveformat);
}
return FileOps.ReadFile <typeof(data)> (path, fileName, saveformat);
return FileOps.ReadFile <data.GetType()> (path, fileName, saveformat);
그러나 그 어느 것도 작동하지 않습니다. 가능합니까 아니면 이것에 시간 낭비를 멈추고 데이터 유형을 지정해야합니까?
가능할까요?
일종의. 이것은 작동합니다 :
float[][] data = null;
data = data.ReadFromFile( . . .);
이것에 시간 낭비를 멈추고 데이터 유형을 지정해야합니까?
예. 이와 같은 변수를 지정하면 유형 이름을 한 번만 입력하면됩니다.
var data = FileOps.ReadFromFile<float[][]>(folderName, fileName, saveFormat);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다