Объединение пути для .NET 2.0

253
21 декабря 2018, 22:10

Каким образом можно правильно описать метод для объединения пути к файлу?

Такое необходимо по той ситуации что стандартный Path.Combine в .NET 2.0 не имеет перегрузок для передачи неограниченных параметров, т.е. в настоящее время, он принимает всего 2.

Я понимаю что я могу сделать свой метод, передавать в него params string[]

public static class Path
{
    public static string Combine(params string[] args)
    {
        string result = string.Empty;
        foreach (string pathPart in args)
        {
            result = System.IO.Path.Combine(result, pathPart);
        }
        return result;
    }
}

но мне кажется есть более изощренный способ.

Answer 1

Мне удалось найти один изощренный способ в этом ответе на английском Stack Overflow. Суть его заключается в том, чтобы добавить Extension Method расширяющий System.String, который вызывает метод Path.Combine.

public static class StringExtensions {
  public static string CombineWith(this string path1, string path2) {
    return Path.Combine(path1, path2);
  }
}

Таким образом, передачу массива параметров можно будет осуществить путем цепочки вызовов:

string path = @"C:\test".CombineWith("one").CombineWith("two.txt");

Это решение будет работать при двух условиях:

  1. Extension Methods поддерживаются в C# 3 и выше. Следовательно, необходимо иметь Visual Studio 2008 и выше.
  2. Для компиляци Extension Method необходим ExtensionAttribute, которого нет в .NET Framework 2.0. К счастью, компилятор поддерживает "утиную типизацию", поэтому достаточно лишь объявить этот атрибут в своем проекте. Пример ниже взят отсюда.

    namespace System.Runtime.CompilerServices {
      [AttributeUsageAttribute(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
      public class ExtensionAttribute : Attribute {
      }
    }
READ ALSO
C# WPF Prism popup окно

C# WPF Prism popup окно

Как открыть окно в C# WPF Prism вначале работы без shell? нужно окно авторизации, и если все нормально shell

214
Нюансы в работе с DOM

Нюансы в работе с DOM

Вот участок HTML кода

199
C# трактовка dynamic

C# трактовка dynamic

Существуют 4 перегруженных функции :

218
Массив из 4-х байт

Массив из 4-х байт

Есть число int(32)Как его конвертировать в массив байтов с MSB first? Перечитал все что нашел о "GetByte", но у меня с этим методом почему-то число просто...

190