Ответы пользователя по тегу .NET
  • Как заглушить звук своего приложения в Windows XP?

    Если компонент - WebBrowser, то поробуйте так
    Ответ написан
    Комментировать
  • Какой должен быть результат поиска если данных нет?

    var result = l.SingleOrDefault();

    1. Вот еще вариант для дальнейшей обработки: использовать что то типа Option из F# (или Nullable в C#)
    Так, что б был сразу понятен контракт метода

    public class SingleResult<T> where T : class { 
      private readonly T result;
      public readonly bool IsSuccess;
    
      private SingleResult(T result, bool isSuccess) {
        this.result = result;
         IsSuccess = isSuccess;
      }
    
      public T Result { 
        get {
           Contract.Requires<InvalidOperationException>(IsSuccess);
           return result;
         }
       }
    
       public static SingleResult<T> Success(T result) {
         Contract.Requires<ArgumentNullException>(result != null, "result");
         
         return new SingleResult<T>(result, true);
       }
    
       public static SingleResult<T> Nothing = new SingleResult<T>(null, false);
    }


    public SingleResult<SomeRecord> FindMe(string prop)         {
      var l = <linqquery >;
      
      var result = l.SingleOrDefault();
      if (result == null)
        return SingleResult<SomeRecord>.Nothing;
            
      return SingleResult<SomeRecord>.Success(result); 
    }


    2. Можно по типу TryParse
    public bool TryFindSingle(string prop, out SomeRecord result) {...}
    Ответ написан
    Комментировать
  • Collection of generic plugins. How to?

    sealed class CompoundPlugin<T> : Plugin<T> {
      private readonly IReadOnlyList<Plugin<T>> plugins;
    
      public CompoundPlugin(IReadOnlyList<Plugin<T>> plugins) {
        Contract.Requires<ArgumentNullException>(plugins != null, "arg");
        Contract.Requires<ArgumentException>(plugins.Count > 0);
    
          this.plugins = plugins;
      }
    
      public override T Modify(T param) {
        return plugins.Aggregate(param, (arg1, plugin) => plugin.Modify(arg1));
      }
    }
    Ответ написан
    Комментировать
  • Как использовать CacheDependency в ASP.NET?

    Попробуйте так

    1. Свой CacheDependency
    class CustomDependencyManager {
      class CustomDependency : CacheDependency {
        public void Invalidate() {
          NotifyDependencyChanged(this, EventArgs.Empty);
         }
      }
      public static CustomDependencyManager Instance = new CustomDependencyManager();
    
      private readonly ConcurrentDictionary<string, CustomDependency> dependencies = new ConcurrentDictionary<string, CustomDependency>();
    
      private CustomDependency GetCacheDependencyInternal(string xxx) {
        return dependencies.GetOrAdd(xxx, s => new CustomDependency());
      }
    
      public void Invalidate(string xxx) {
        GetCacheDependencyInternal(xxx).Invalidate();
      }
      
      public CacheDependency For(string xxx) {
        GetCacheDependencyInternal(xxx);            
      }
    }


    2. Когда нужно, сбрасываем кеш

    Cache.Insert("prefix_"+xxx+"_"+yyyy, data, CustomDependencyManager.Instance.For(xxx), DateTime.Now.AddSeconds(1), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
    
    ...
    ...
    // Пора сбросить кеш 
    CustomDependencyManager.Instance.Invalidate(xxx);
    Ответ написан
  • Как реализовать передачу строк из C++ dll в .Net C# проект?

    Запилил пример
    #include <stdio.h>
    
    extern "C" __declspec(dllexport) 
    void __stdcall TestString(char str[]) {
      char source[] = "Привет!";
      sprintf_s(str, sizeof(source), source);
    }


    class Program {
      [DllImport(@"Project1.dll", CharSet=CharSet.Ansi)]
       public static extern void TestString(StringBuilder str);
            
       static void Main(string[] args) {
          var sb = new StringBuilder(4096);
          TestString(sb);
    
          Console.Write(sb.ToString());
    
          Console.ReadLine();
       }
    }


    Солюшн с двумя проектами C# и С++
    Ответ написан
    2 комментария
  • Вывод свойств объекта в NUnit

    В сообщении выводиться текст, который возвращает ToString().

    Если Class1 нельзя менять, то можно создать класс "обертки", в котором переопределить метод ToString() так, что б он выводил нужную информацию. Также придется вместо Class1Comparer использовать другой класс, который сравнит "обертки"

    class Class1Wrapper {
       public readonly Class1 Wrapped;
      
       public Class1Wrapper(Class1 toWrap) { 
           Wrapperd = toWrap;
       }
    
      public override string ToString() {
          return string.Format("X: {0}, Y : {1}", Wrapped.X, Wrapped.Y);
      }
    
     public static Class1Wrapper Wrap(Class1 toWrap) { 
        return new Class1Wrapper(toWrap) ;
      }
    }
    
    Дальше в тесте
    
    Assert.That(templateSeries.getElements().Select(Class1Wrapper.Wrap).ToArray(),
             Is.EqualTo(resultSeries.getElements().Select(Class1Wrapper.Wrap).ToArray())
              .Using(new Class1WrapperComparer()));
    Ответ написан
  • Странная, зависящая от версии .NET Framework, проблема со сборкой мусора?

    Собрал VS 13 из исходников.

    Если запускать Resharper'овским test runner'ом - тест проходит
    Если запускать Resharper'овским test runner'ом в debug - тест падает
    Если запускать VS test runner'ом - тест падает

    Если сделать консольное приложение - то остается 1 объект в WeakReferencesStorage

    Возможно стоить копать в сторону работы GC в debug окружении
    Ответ написан