直接将 C# 值赋值到对象引用

C# value assignment to object reference directly

提问人:Amit Dhanuka 提问时间:9/11/2018 更新时间:9/11/2018 访问量:65

问:

Person p = "Any Text Value";

人是一个类。

这在 C# 中是否可能。

我的回答是否定的,但根据面试官的说法,这是可能的。他也没有给我任何线索。

C# .NET 赋值运算符

评论


答:

3赞 Matthew Watson 9/11/2018 #1

这可以通过如下方式完成:implicit

using System;

namespace Demo
{
    public sealed class Person
    {
        public Person(string name)
        {
            Name = name;
        }

        public static implicit operator Person(string name)
        {
            return new Person(name);
        }

        public string Name { get; }
    }

    static class Program
    {
        static void Main()
        {
            Person person = "Fred";

            Console.WriteLine(person.Name);
        }
    }
}

但是,显式转换是首选 - 通常应该只对诸如发明新的数值类型(如 Complex)之类的事情使用隐式转换。

4赞 Kirk Larkin 9/11/2018 #2

您可以使用隐式转换来实现此目的。可以说,这将是对隐式转换的滥用,因为在这种情况下应该代表什么并不明显。下面是使示例成功的代码示例:"Any Text Value"

public class Person
{
    public string Name { get; set; }

    public static implicit operator Person(string name) =>
        new Person { Name = name }; 
}

下面是一个 .NET Fiddle 示例。