Sco*_*t S 6 c# ternary-operator
我想为<b <c创建一个三元运算符,它是<b && b <c.或者你可以想到的任何其他选项<b> c等等......我是自己的短片形式的粉丝,我想创建它,因为我在高中学习编程.
怎么样?
por*_*ges 10
不要相信仇敌;)
你可以用C#做到这一点.这是一个示例实现 - 我基于Icon的方式进行链接...如果比较成功,结果是正确参数的结果,否则返回特殊的"失败"结果.
您需要使用的唯一额外语法是Chain()在第一个项目之后调用.
class Program
{
static void Main(string[] args)
{
if (2.Chain() < 3 < 4)
{
Console.WriteLine("Yay!");
}
}
}
public class Chainable<T> where T : IComparable<T>
{
public Chainable(T value)
{
Value = value;
Failed = false;
}
public Chainable()
{
Failed = true;
}
public readonly T Value;
public readonly bool Failed;
public static Chainable<T> Fail { get { return new Chainable<T>(); } }
public static Chainable<T> operator <(Chainable<T> me, T other)
{
if (me.Failed)
return Fail;
return me.Value.CompareTo(other) == -1
? new Chainable<T>(other)
: Fail;
}
public static Chainable<T> operator >(Chainable<T> me, T other)
{
if (me.Failed)
return Fail;
return me.Value.CompareTo(other) == 1
? new Chainable<T>(other)
: Fail;
}
public static Chainable<T> operator ==(Chainable<T> me, T other)
{
if (me.Failed)
return Fail;
return me.Value.CompareTo(other) == 0
? new Chainable<T>(other)
: Fail;
}
public static Chainable<T> operator !=(Chainable<T> me, T other)
{
if (me.Failed)
return Fail;
return me.Value.CompareTo(other) != 0
? new Chainable<T>(other)
: Fail;
}
public static bool operator true(Chainable<T> me)
{
return !me.Failed;
}
public static bool operator false(Chainable<T> me)
{
return me.Failed;
}
public override bool Equals(object obj)
{
return Value.Equals(obj);
}
public override int GetHashCode()
{
return Value.GetHashCode();
}
}
public static class ChainExt
{
public static Chainable<T> Chain<T>(this T value) where T : IComparable<T>
{
return new Chainable<T>(value);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1229 次 |
| 最近记录: |