人们可能并不总是Type在编译时知道对象,但可能需要创建一个实例Type.你如何从一个新的对象实例Type?
foreach (var filter in filters)
{
var filterType = typeof(Filters);
var method = filterType.GetMethod(filter, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static);
if (method != null)
{
var parameters = method.GetParameters();
Type paramType = parameters[0].ParameterType;
value = (string)method.Invoke(null, new[] { value });
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能投value来paramType?value是string,paramType很可能只是一个基本的类型一样int,string或者可能float.如果没有可能的转换,我会很好地抛出异常.
我有Button,我已将此按钮绑定到ViewModel中的命令说OpenWindowCommand.当我点击按钮时,我想打开新窗口.但是创建窗口实例并从视图模型显示窗口违反了MVVM.我已经创建了界面
interface IWindowService
{
void showWindow(object dataContext);
}
Run Code Online (Sandbox Code Playgroud)
和WindowService一样实现这个接口
class WindowService:IWindowService
{
public void showWindow(object dataContext)
{
ChildWindow window=new ChildWindow();
window.DataContext=dataContext;
window.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
在这个课程中,我指定了ChildWindow.因此,这个类与显示ChildWindow紧密结合.当我想要显示另一个窗口时,我必须实现具有相同接口和逻辑的另一个类.如何使这个类通用,以便我可以传递任何窗口的实例,并且类将能够打开任何窗口?我没有使用任何构建的MVVM框架.我已经阅读了很多关于StackOverflow的文章,但我找不到任何解决方案.
在Windows应用程序中,使用C#,我有一个报告模块,它将依赖于类来填充报告.但是会有很多报告,我不想为每个报告编写代码.
流程将如下:在报告编辑器中,报告将被分配一个类(即"应用程序")作为字符串.当用户选择要运行的报告时,代码将从SQL查询中获取数据.代码将获取数据并找出将数据放入哪个类.然后,报告将获取该类,并使用该类中的数据填充报告.
这是我的困境,我如何使代码动态化,以便代码将指定的类转换为适当的类对象?
记住的例子:
gVar = Report;
(gVar.ReportClass)oClass = new gVar.ReportClass;
Run Code Online (Sandbox Code Playgroud) 目标:
我正在尝试创建一个权限页面,该页面根据整个应用程序中webforms中的控件为角色分配权限.我正在尝试编写将为给定页面创建一系列控件的代码.页面名称将作为字符串传递.
以下这篇文章与我正在寻找的内容非常相似,尽管它是为VB.NET中的Windows窗体应用程序编写的.我希望在C#中找到一个适用于webforms的解决方案. http://www.dreamincode.net/forums/topic/222439-list-of-all-controls-in-project-vbnet/
下一篇文章似乎也是我正在寻找的但是在文件中查找的建议不起作用,因为我希望代码更通用并扩展,因为我将页面或控件添加到表单而不是硬编码: Get程序集中每个WebForm上的控件列表
大概的概念:
我的想法是让用户从下拉列表中选择一个角色.然后,用户将从下拉列表中选择应用程序中的页面.然后,SelectedIndexChanged将查询所选页面的webform类,并生成一个网格,列出该页面上控件的名称以及可以分配的另一个权限下拉列表.当用户完成控件和权限的编辑后,他们会单击"保存",信息将保存到数据库中.
当表单经过身份验证的用户加载页面时,该页面将查询数据库以获取每个控件的权限,并根据用户的角色和权限将具有分配给该控件的只读,编辑或不可见状态.我的最终目标是让最终用户管理员能够管理应用程序中的权限,而不是拥有广泛的角色和权限集,或者必须根据客户的需求进行自定义的一次性工作.请注意,这将是我尝试访问其他页面上的控件的唯一页面.
我试图列出ASP.NET项目或命名空间中的所有控件,因为在我的情况下,我当前项目中只有一个命名空间.我找到了大量列出当前表单控件的示例,但没有找到任何可以在站点范围内执行此操作的代码.我也能够列出我拥有的所有webform类: 如何在命名空间中获取所有类?
但似乎你不能再去查询那个类定义的控件 - 如果有人可以解决这个问题,我想这会让我进入下一步.
我试过的:
一种是实例化webform本身,然后以编程方式循环遍历控件.这至少不像我做的那样成功.Webform1 wf = new Webform1(); 我还尝试添加一个构造函数和一个方法,然后循环遍历控件.
我也尝试通过Activator.CreateInstance实例化webform类我尝试按照此页面上的示例操作: 实例化具有运行时确定类型的对象
例:
Page o = (Page)System.Activator.CreateInstance(Type.GetType(pageName));
foreach (Control c in o.Controls)
lblMessages.Text = lblMessages.Text + c.ClientID.ToString() + "<BR>";
Run Code Online (Sandbox Code Playgroud)
这也没有成功.它确实编译但我得到一个控制计数为零,当然没有控制.
我试图避免的最后一种方法是在我的应用程序中收集控件的手动方法( 在生产中应该是静态的),然后仍然拥有权限页面,管理员将权限分配给那一点.
最后:
任何指示我能够动态微调控件权限的正确方向的帮助都将非常受欢迎,即使这包括查看处理权限的不同方式.
我正在使用别人的代码并尝试进行一些修改。所以我需要做的是采取以下措施:
RemoteFileDP remoteFile = new DPFactory().CreateRemoteFileDP(configData);
Run Code Online (Sandbox Code Playgroud)
并更改它,以便 RemoteFile 可以等于字符串变量中的内容。为了进一步解释,让我给出更多代码:
ConfigDP configData = new ConfigDP();
Run Code Online (Sandbox Code Playgroud)
因此上面的语句在remoteFile语句之前执行,并且ConfigDP上面有两个类(抽象Config和它的基类:抽象ConfigBase)。DP 也是它上面的两个抽象类(抽象 RemoteFile 和抽象 RemoteFileBase)的子类。
根据我的理解,remoteFile 是从数据库查询中提取数据的结果,存储到列表或哈希表中(对不起,只是一个实习生,所以我正在解决这个问题)。
我需要remoteFile接受字符串值的原因是因为有许多方法利用remoteFile中的信息,并且我希望避免必须创建一大堆接受字符串值而不是RemoteFileDP remoteFile的重载方法。
因此,如果我可以采用如下字符串值:
string locationDirectory;
Run Code Online (Sandbox Code Playgroud)
它是从另一个方法传入的,然后具有类似于以下内容的内容:
RemoteFileDP remoteFile = locationDirectory;
Run Code Online (Sandbox Code Playgroud)
那么使用remoteFile 的所有其他方法将不必重载或更改。
抱歉所有细节,但这是我第一次发帖,所以我希望我提供了足够的信息。我确实查看了C# 将动态字符串转换为现有类和C#:使用运行时确定的类型实例化对象并编写了以下代码:
RemoteFilesDP remoteFile = (RemoteFileDP)Activator.CreateInstance(typeof(RemoteFileDP), locationDirectory);
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到“MissingMethodException”错误,表示找不到 RemoteFileDP 的构造函数,但我确实有构造函数,如下所示:
public RemoteFileDP()
{
} //end of RemoteFilePlattsDP constructor
Run Code Online (Sandbox Code Playgroud)
提前感谢您的帮助!