相关疑难解决方法(0)

42
推荐指数
6
解决办法
1万
查看次数

如何在c#中创建描述对象的自定义语法?

搜索努力:

  1. 谷歌:
  2. 堆栈溢出:

还有一些我不记得了......


预想:每个"内置型" C#(如int,float,char等等)是一个类,并且在C#每类从继承Object类.因此,每个"内置类型"都继承自Object该类.

考虑到这种先入为主,我假设要设置一个double变量,例如,我需要使用"普通"语法设置一些属性.这就是我的意思:

double number = new double();

number.leftSide= 5;
number.rightSide = 23;

Console.Write(number);

// Output:
// 5.23
Run Code Online (Sandbox Code Playgroud)

但是C#有用于创建一个特殊的,相当于语法double变量(在某种程度上,它会做什么,我试图做以上,不就是上面的代码将实际工作):

double number = 5.23;
Run Code Online (Sandbox Code Playgroud)

编译器理解浮点将数字分成两个:5和23.

我的问题是我是否可以对自己的课程做同样的事情.例如,如果我有自己的Time类(这只是一个例子,所以请不要建议使用内置的时间类),我希望有这样的选项来实例化它:

Time time = 10:25;
Run Code Online (Sandbox Code Playgroud)

并且编译器会理解冒号将数字分成小时和分钟(我认为,这是我需要在Time类中创建的属性).

我听说过Roslyn CTP,但我正在寻找一种更简单,内置的方式来做我所描述的.

我可以做吗?

c# types object

5
推荐指数
1
解决办法
461
查看次数

用roslyn扩展c#语法

我试图在没有else的情况下实现"return if"/"return value if",因为我只想在条件有效时返回或返回值.

我知道,有if (condition) return;或者if (condition) return value;我想让代码更清洁一点,因为它更具可读性,所以拥有这种语法会很好.

我听说过roslyn这是可能的,并在这里回答问题:有没有办法在C#中实现自定义语言功能?但我不知道如何实现它.

所以代码将是这样的:

public class Testclass
{
    public static void Main(String[] args)
    {
        Testclass t = new Testclass();
        t.TestMyClassWithVoid();
        bool success = t.TestMyClassWithInt(3) == 3;
        bool fail = t.TestMyClassWithInt(2) == 2;
    }

    public void TestMyClassWithVoid()
    {
        int value = GetValueFromSomeWhere();
        return if value == 3;

        DoSomeOtherStuffSinceValueIsNotThree();
    }

    public int TestMyClassWithInt(int value)
    {
        return value if value == 3;

        DoSomeOtherStuffSinceValueIsNotThree();
        return -1;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法我怎么能解决这个问题?我开始尝试使用Roslyn.Compilers.CSharp …

c# roslyn

5
推荐指数
1
解决办法
996
查看次数

获取参数的调用变量名称

关于问题从调用方法获取参数名称查找传递给C#中函数的变量名称,我仍在寻找一种方法来定义WhatDoesTheAnimalSay_WANTED方法:我想知道用作变量的名称一个参数:

public class Farm
{
    public readonly string Cow = "Muuuuhh";

    public string Cat { get; set; }

    public void MainFunction()
    {
        var dog = "WauWau";
        var kiwi = new Bird("QueeeekQueeek");

        Cat = "Miiiaaauuuu";

        // This one works but looks kinda ugly and is cumbersome when used
        WhatDoesTheAnimalSay(nameof(dog), dog);
        WhatDoesTheAnimalSay(nameof(Cow), Cow);
        WhatDoesTheAnimalSay(nameof(Cat), Cat);
        WhatDoesTheAnimalSay(nameof(kiwi), kiwi);

        WhatDoesTheAnimalSay_WRONG1(dog);
        WhatDoesTheAnimalSay_WRONG2(dog);

        WhatDoesTheAnimalSay_WANTED(dog);
        WhatDoesTheAnimalSay_WANTED(Cow);
    }

    public void WhatDoesTheAnimalSay<T>(string name, T says)
    {
        MessageBox.Show("The " + name + " …
Run Code Online (Sandbox Code Playgroud)

.net c# ixmlserializable nameof

4
推荐指数
1
解决办法
1826
查看次数

如何创建自定义关键字C#

我正在编写一个供个人使用的库,它极大地扩展了C#功能,我想知道一些非常有趣的东西......是否可以创建自己的关键字?例如,if,foreach,for等.

我想要这样做的原因可以在我之前的问题中找到.

c# keyword extending

2
推荐指数
1
解决办法
2611
查看次数