如何将名称空间检索到字符串C#
我正在编写一个需要程序名称空间的程序,但我似乎不知道如何检索它。我希望最终结果是一个字符串 我能够找到一个关于这个主题的MSDN页面,但它证明对我自己没有帮助。 任何帮助都将不胜感激。这个程序是用C语言编写的 编辑:对不起,伙计们,这不是一个控制台应用程序。这应该可以:如何将名称空间检索到字符串C#,c#,string,namespaces,C#,String,Namespaces,我正在编写一个需要程序名称空间的程序,但我似乎不知道如何检索它。我希望最终结果是一个字符串 我能够找到一个关于这个主题的MSDN页面,但它证明对我自己没有帮助。 任何帮助都将不胜感激。这个程序是用C语言编写的 编辑:对不起,伙计们,这不是一个控制台应用程序。这应该可以: var myType = typeof(MyClass); var n = myType.Namespace; 向控制台写出: Type myType = typeof(MyClass); Console.WriteLine
var myType = typeof(MyClass);
var n = myType.Namespace;
向控制台写出:
Type myType = typeof(MyClass);
Console.WriteLine("Namespace: {0}.", myType.Namespace);
设置WinForm标签:
Type myType = typeof(MyClass);
namespaceLabel.Text = myType.Namespace;
或者在相关类中创建一个方法并在任何地方使用:
public string GetThisNamespace()
{
return GetType().Namespace;
}
您可以简单地使用并通过课程(即程序):
将打印:
ConsoleApplication1
把这个放到你的组件上:
public static string GetCurrentNamespace()
{
return System.Reflection.Assembly.GetExecutingAssembly().EntryPoint.DeclaringType.Namespace;
}
或者,如果希望此方法位于程序使用的库中,请按如下方式编写:
[System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.NoInlining)]
public static string GetCurrentNamespace()
{
return System.Reflection.Assembly.GetCallingAssembly().EntryPoint.DeclaringType.Namespace;
}
如果在命名空间
B
中有类A
的x
项,则可以使用:
string s = x.GetType().Namespace;
无s
包含“B”
您还可以使用x.GetType().Name
获取类型名称,或者使用x.GetType().FullName
获取两者
Type myType = typeof(MyClass);
// Get the namespace of the myClass class.
Console.WriteLine("Namespace: {0}.", myType.Namespace);
基于Joe的评论,您仍然可以使用
Type myType = typeof(MyClass);
// Get the namespace of the myClass class.
var namespaceName = myType.Namespace.ToString();
使用namespaceName
作为变量以字符串值的形式访问名称空间名称。这不会出错:
MethodBase.GetCurrentMethod().DeclaringType.Namespace
添加到所有答案中 从C#6.0开始,就有了关键字的名称
string name = nameof(MyNamespace);
这有几个优点:
name
将等于Bar
:
namespace Foo.Bar
{
string name = nameof(Foo.Bar);
}
如果您是从需要捕获的命名空间中的类执行它,则可以使用:
GetType().Namespace
这很好地工作,因为它允许您重构名称空间,并且仍然可以工作。作为一个滚动upp,所有帖子答案: 从以字符串tableName形式给定的表中获取所有列的值: var tableName = "INVENTORY_PRICE"; var assembly = Assembly.GetExecutingAssembly(); var tip = typeof(Form3); var t = assembly.GetType(tip.Namespace + "." + tableName); if (t != null) { var foos = db.GetTable(t); foreach (var f in foos) { Console.WriteLine(f + ":"); foreach (var property in f.GetType().GetProperties()) if (property != null) { var pv = property.GetValue(f, null); Console.WriteLine(" " + property.Name + ":" + pv); } Console.WriteLine("------------------------------------------------"); } } var tableName=“存货价格”; var assembly=assembly.getExecutionGassembly(); var tip=类型(格式3); var t=assembly.GetType(tip.Namespace+“+tableName); 如果(t!=null) { var foos=db.GetTable(t); foreach(foos中的var f) { Console.WriteLine(f+“:”); foreach(f.GetType().GetProperties()中的var属性) if(属性!=null) { var pv=property.GetValue(f,null); Console.WriteLine(“+property.Name+”:“+pv”); } Console.WriteLine(“------------------------------------------------------------”); } }
如果我们使用ado,这很容易,这个示例使用LINQ上下文…不幸的是,它不是一个控制台应用程序,所以行中{0}的重要性是:console.WriteLine(“Namespace:{0}.”,myType.Namespace);我不知道。好吧,这是什么类型的应用程序?WriteLine不是她最重要的部分。使用
string.Format()
继续。这是一个windows窗体应用程序。@ElliotAmesmyType.Namespace
在这种情况下是一个字符串。我不清楚您的问题。为什么不在需要的地方编写程序的名称空间呢?这是一个很有道理的问题。在程序中用字符串硬编码名称空间会导致灾难-迟早有人会更改名称空间,忘记或不知道名称空间也在程序中编码,然后失败。用例:程序集中的嵌入式资源的路径前缀为名称空间。下面的答案给出了一种查找前缀的强类型方法。这比公认的答案和此处发布的其他变体要好多少?这一行可以在应用程序中的任何方法中逐字使用。被接受的答案是围绕着(MyClass)的类型而写的。因此,对于真正的复制/粘贴友好型代码来说,这是成功的(虽然在运行时可能会慢一点)。就目前的情况来看,这个答案是误导性的,因为它只适用于单段名称空间。@ThePadeMella,从技术上讲是这样的。如果您想要包含您引用的名称空间的名称,可以执行类似于$“{nameof(ns1)}.{nameof(ns2)}”
var tableName = "INVENTORY_PRICE";
var assembly = Assembly.GetExecutingAssembly();
var tip = typeof(Form3);
var t = assembly.GetType(tip.Namespace + "." + tableName);
if (t != null)
{
var foos = db.GetTable(t);
foreach (var f in foos)
{
Console.WriteLine(f + ":");
foreach (var property in f.GetType().GetProperties())
if (property != null)
{
var pv = property.GetValue(f, null);
Console.WriteLine(" " + property.Name + ":" + pv);
}
Console.WriteLine("------------------------------------------------");
}
}