C#直接赋值给对象引用

C# value assignment to object reference directly

Person p = "Any Text Value";

人是class。

这在 C# 中是否可行。

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

这可以使用 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);
        }
    }
}

但是,首选显式转换 - 您通常应该 only use implicit for things like inventing a new numeric type such as Complex.

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

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

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

这是一个 .NET Fiddle 示例。