Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C中的自定义类区分内置系统类型#_C#_.net - Fatal编程技术网

C# 用C中的自定义类区分内置系统类型#

C# 用C中的自定义类区分内置系统类型#,c#,.net,C#,.net,是否有任何方法可以区分内置系统类型(字符串、列表等)与C#中的自定义类?您可以使用它来查看它来自哪个程序集,也可以使用它来获取名称空间。其余部分取决于您对“内置”的定义。例如,你可以这样说 var builtIn = someType.Namespace.StartsWith("System"); 但是对于您想要的内容没有“硬”定义。您可以使用来查看它来自哪个程序集,也可以使用来获取名称空间。其余部分取决于您对“内置”的定义。例如,你可以这样说 var builtIn = someType.N

是否有任何方法可以区分内置系统类型(字符串、列表等)与C#中的自定义类?

您可以使用它来查看它来自哪个程序集,也可以使用它来获取名称空间。其余部分取决于您对“内置”的定义。例如,你可以这样说

var builtIn = someType.Namespace.StartsWith("System");
但是对于您想要的内容没有“硬”定义。

您可以使用来查看它来自哪个程序集,也可以使用来获取名称空间。其余部分取决于您对“内置”的定义。例如,你可以这样说

var builtIn = someType.Namespace.StartsWith("System");

但是对于您想要的内容没有“硬”定义。

内置类型和自定义类型之间没有逻辑上和有意义的区别


唯一的区别是内置类型驻留在
mscorlib
程序集中或其他框架程序集中。你可以检查一下,没别的了。但是,我会质疑这些信息的有用性(由于我上面所说的)。

内置类型和自定义类型之间没有逻辑上和有意义的区别


唯一的区别是内置类型驻留在
mscorlib
程序集中或其他框架程序集中。你可以检查一下,没别的了。但是,我会质疑这些信息的有用性(由于我上面所说的)。

您必须更好地定义“内置系统类型”的含义。您是指System.*命名空间中的所有类型吗?例如,如果我有自定义类Person,则在搜索所有“内置类型”时,它不应返回此类。这将有助于区分Person的对象。是的,但它是否应该返回System.Xml.XmlReader?System.Windows.UIElement怎么样?如果创建一个自定义Person类,但将其放在系统名称空间中,该怎么办?正如@Konrad Rudolph所说,您所称的“内置”系统类型和其他类型之间没有任何有意义的区别,因此您必须更清楚地了解这一点。也许你可以解释一下你打算用这个区别做什么?也许有一个更简单的解决方案。你必须更好地定义“内置系统类型”的含义。您是指System.*命名空间中的所有类型吗?例如,如果我有自定义类Person,则在搜索所有“内置类型”时,它不应返回此类。这将有助于区分Person的对象。是的,但它是否应该返回System.Xml.XmlReader?System.Windows.UIElement怎么样?如果创建一个自定义Person类,但将其放在系统名称空间中,该怎么办?正如@Konrad Rudolph所说,您所称的“内置”系统类型和其他类型之间没有任何有意义的区别,因此您必须更清楚地了解这一点。也许你可以解释一下你打算用这个区别做什么?也许有一个更简单的解决方案。但没有什么能阻止您将自己的类型放入
系统
名称空间。@KonradRudolph:当然可以。但这就像将类型放入
namespace std
:这在实践中不应该发生。不同的是,将任何内容放入
namespace std
实际上是非法的:这样做的程序都会被破坏,无论编译器是否接受。在.NET中,并没有严格的规则限制这一点。@KonradRudolph:再一次,从技术上讲,你们是对的。但在实践中它确实发生了(我已经看到了)。作为一个实用的解决方案,只要我没有编写对人类生命负责的代码,我愿意进行粗略的检查,因为严密的检查可能是YAGNI。但是,没有什么可以阻止你将自己的类型放入
系统
命名空间。@KonradRudolph:当然可以。但这就像将类型放入
namespace std
:这在实践中不应该发生。不同的是,将任何内容放入
namespace std
实际上是非法的:这样做的程序都会被破坏,无论编译器是否接受。在.NET中,并没有严格的规则限制这一点。@KonradRudolph:再一次,从技术上讲,你们是对的。但在实践中它确实发生了(我已经看到了)。作为一个实用的解决方案,只要我没有编写对人类生命负责的代码,我愿意进行粗略的检查,因为密封检查可能是YAGNI。非常感谢您的回复。我只是想在两个不同的对象之间自动映射我的属性,比如NamespaceA.Person和NamespaceB.Person。如您所见,如果两个属性都具有相似的基元类型,那么我们可以轻松地实现它们。但是如果NamespaceA.Person有一个Employee类型的属性,而NamespaceB.Person只有一个字段EmployeeId(long类型)映射到它,那么我如何让函数理解它遇到了一个类,它不应该将该类映射到long类型的属性??相反,它应该在这个类中搜索long属性。非常感谢您的回复。我只是想在两个不同的对象之间自动映射我的属性,比如NamespaceA.Person和NamespaceB.Person。如您所见,如果两个属性都具有相似的基元类型,那么我们可以轻松地实现它们。但是如果NamespaceA.Person有一个Employee类型的属性,而NamespaceB.Person只有一个字段EmployeeId(long类型)映射到它,那么我如何让函数理解它遇到了一个类,它不应该将该类映射到long类型的属性??相反,它应该在这个类中搜索long属性。