簡體   English   中英

c# 如何使用反射從方法中獲取值

[英]c# How to get a value from a method using reflection

嗨,我怎樣才能執行一個類中的所有方法並從我卡住的那個調用中獲取值?????

(我正在使用.net 4.8)

我想在程序啟動時執行所有方法,以確保所有配置值都在配置文件中所以我沒有 ConfigurationManager.AppSettings 整個代碼,但所有配置值都位於特定類中

public static void CheckConfigValues()
{
    var cv = new ConfigValues();
    var cvt = cv.GetType();
    var cvm = cvt.GetMethods();

    foreach (var item in cvm)
    {
        var itemValue = ?????
        if(string.IsNullOrEmpty(itemValue))
        {
            throw ...
        }
    }
}       
public class ConfigValues
{
    public static int GetMaxCalendarItems()
    {
          return int.Parse(ReadKeyFromAppConfig("GetMaxCalendarItems"));
    }
    
    public static int GetSomething....()
    {
          return int.Parse(ReadKeyFromAppConfig("Something"));
    }
    
    public static string ReadKeyFromAppConfig(string keyName)
    {
        try
        {
            var keyValue = ConfigurationManager.AppSettings[keyName];
            if (!string.IsNullOrEmpty(keyValue))
            {
                return keyValue;
            }
            else
            {
                Logger.Error($"Unable to read variable {keyName});
                throw new MissingFieldException(keyName);
            }   
            

有幾點建議。

您可以將ReadKeyFromAppConfig方法聲明為私有方法。

您正在返回int ,如果傳遞的值為 null,則 int.Parse 會給出異常。 所以你更好int.TryParse並檢查它的返回值。

我已經為您創建了一個示例類,您可以在代碼中使用相同的概念。

MethodInfo[] methodInfos = Type.GetType("MyNamespace.Test")
                .GetMethods(BindingFlags.Public | BindingFlags.Static);
foreach (MethodInfo methodInfo in methodInfos)
{
    Console.WriteLine(methodInfo.Name);
    var result = methodInfo.Invoke(test, null);
}

internal class Test
{
    public static int Method1()
    {
        return 0;
    }

    public static int Method2()
    {
        return -1;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM