Я понимаю, что это распространенная проблема - пытаться перегрузить один универсальный шаблон и универсальный массив. Все эти ответы говорят о том, почему это работает таким образом и как существуют лучшие способы сделать это, но ни один из них не показывает это. Я ищу предложения о том, как добиться того, чего я добиваюсь, и я открыт для рефакторинга, и я делаю это по-другому
Вот код, который представляет проблему:
https://dotnetfiddle.net/sWrNj3
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
public static class MyParser
{
public static void Parse<T>(string name, T value)
{
Console.WriteLine($"{name}: single");
}
// Must take in IEnumerable<T>
public static void Parse<T>(string name, IEnumerable<T> collection)
{
Console.WriteLine($"{name}: IEnumerable");
}
public static void ParseObj<T>(T data)
{
foreach (var prop in data.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
Parse(prop.Name, prop.GetValue(data, null));
}
}
}
public class Program
{
public static void Main()
{
MyParser.ParseObj(new
{
Str = "abc",
Num = 543,
Arr = new[]{1, 2, 3},
Chars = new char[]{'x', 'y', 'z'}}
);
}
}
Итог:
Str: single
Num: single
Arr: single
Chars: single
Желаемая:
Str: single
Num: single
Arr: IEnumerable
Chars: IEnumerable