szabototo89 / CodeSharper

Refactoring tool, written in C# and using TDD for developing
1 stars 0 forks source link

[core] ValueArgumentWrapper type problem #33

Closed szabototo89 closed 9 years ago

szabototo89 commented 9 years ago

This solution may solve this problem (http://ideone.com/htzAWP):

using System;

public interface IArgument {
    Object Value { get; }
}

public interface IArgument<out TValue>
{
    TValue Value { get; }
}

public static class Argument {
    public static Argument<T> Create<T>(T value) {
        return new Argument<T>(value);
    }

    public static Boolean Is<TArgumentType>(this IArgument argument) {
        return argument.Value is TArgumentType;
    }
}

public class Argument<TValue> : IArgument<TValue>, IArgument {

    Object IArgument.Value { get { return Value; } }

    public TValue Value { get; protected set; }

    public Argument(TValue value) {
        Value = value;
    }
}

public class Test
{
    public static void Main()
    {
        var number  = Argument.Create(10);
        var obj     = Argument.Create(new object());
        var text    = Argument.Create("Hello World!");
        var objText = Argument.Create<Object>("Hello World!");

        var array = new IArgument[] { number, obj, text, objText };

        foreach (var argument in array) {
            Console.WriteLine("argument.Is<Object>(): {0}", argument.Is<Object>());
            Console.WriteLine("argument is Argument<Object>: {0}", argument is Argument<Object>);
            Console.WriteLine(argument.Value);  
        }
    }
}
szabototo89 commented 9 years ago

Adding a new IValueArgument interface solved the problem:

public interface IValueArgument<out TValue>
{
  TValue Value { get; }
}