你如何在Python中动态设置局部变量?
(变量名称是动态的)
更新:我知道这不是一个好的做法,而且这些言论是合法的,但这不是一个坏问题,只是一个更理论的问题 - 我不明白为什么这证明了这一点.
以下代码导致使用未分配的局部变量"numberOfGroups":
int numberOfGroups;
if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
{
numberOfGroups = 10;
}
Run Code Online (Sandbox Code Playgroud)
但是,这段代码工作正常(但ReSharper说这= 10是多余的):
int numberOfGroups = 10;
if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
{
numberOfGroups = 10;
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么,还是编译器不喜欢我||?
我把它缩小到dynamic导致问题(options在上面的代码中是一个动态变量).问题仍然存在,为什么我不能这样做?
此代码无法编译:
internal class Program
{
#region Static Methods
private static void Main(string[] args)
{
dynamic myString = args[0];
int myInt;
if(myString == null || !int.TryParse(myString, out myInt))
{
myInt …Run Code Online (Sandbox Code Playgroud) 我正在努力动态创建一些Javascript,它将在构建时插入到网页中.
Javascript将用于根据另一个列表框中的选择填充列表框.当选择一个列表框时,它将根据列表框的选定值调用方法名称.
例如:
Listbox1包含:
颜色
形状
如果选择"颜色",则会调用填充另一个列表框的"populate_Colours"方法.
澄清我的问题:如何在Javascript中进行"populate_Colours"调用?
当名称包含在字符串变量中时,如何动态调用方法?例如:
class MyClass
def foo; end
def bar; end
end
obj = MyClass.new
str = get_data_from_user # e.g. `gets`, `params`, DB access, etc.
str #=> "foo"
# somehow call `foo` on `obj` using the value in `str`.
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?这样做是否存在安全风险?
我知道如何SEL在编译时使用,@selector(MyMethodName:)但我想要做的是从动态创建一个选择器NSString.这甚至可能吗?
我可以做什么:
SEL selector = @selector(doWork:);
[myobj respondsToSelector:selector];
Run Code Online (Sandbox Code Playgroud)
我想做什么:(伪代码,这显然不起作用)
SEL selector = selectorFromString(@"doWork");
[myobj respondsToSelector:selector];
Run Code Online (Sandbox Code Playgroud)
我一直在搜索Apple API文档,但还没有找到一种不依赖于编译时@selector(myTarget:)语法的方法.
我将把我的问题总结为以下代码片段.
List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常.
现在我尝试了以下内容
dynamic dList = list;
Console.WriteLine(dList.First());
Run Code Online (Sandbox Code Playgroud)
但是我得到了RuntimeBinderException.为什么会这样?
在SQL Server中使用存储过程执行动态SQL命令的真实优点和缺点是什么?
EXEC (@SQL)
Run Code Online (Sandbox Code Playgroud)
与
EXEC SP_EXECUTESQL @SQL
Run Code Online (Sandbox Code Playgroud)
?
只要我在班级和班级ClassSameAssembly相同的班级中,下面的代码就能正常运行Program.但是当我将类移动ClassSameAssembly到一个单独的程序集时,RuntimeBinderException会抛出一个(见下文).有可能解决它吗?
using System;
namespace ConsoleApplication2
{
public static class ClassSameAssembly
{
public static dynamic GetValues()
{
return new
{
Name = "Michael", Age = 20
};
}
}
internal class Program
{
private static void Main(string[] args)
{
var d = ClassSameAssembly.GetValues();
Console.WriteLine("{0} is {1} years old", d.Name, d.Age);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'object'不包含'Name'的定义
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at ConsoleApplication2.Program.Main(String[] args) in C:\temp\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs:line …Run Code Online (Sandbox Code Playgroud) 我可以动态调用方法名称为字符串的对象方法吗?我会想象它是这样的:
var FooClass = function() {
this.smile = function() {};
}
var method = "smile";
var foo = new FooClass();
// I want to run smile on the foo instance.
foo.{mysterious code}(); // being executed as foo.smile();
Run Code Online (Sandbox Code Playgroud) 我知道有一些问题可以解决这个问题,但答案通常遵循推荐字典或参数集合的方式,这在我的情况下不起作用.
我正在使用一个通过反射工作的库,用具有属性的对象做很多聪明的事情.这适用于已定义的类以及动态类.我需要更进一步,按照这些方针做一些事情:
public static object GetDynamicObject(Dictionary<string,object> properties) {
var myObject = new object();
foreach (var property in properties) {
//This next line obviously doesn't work...
myObject.AddProperty(property.Key,property.Value);
}
return myObject;
}
public void Main() {
var properties = new Dictionary<string,object>();
properties.Add("Property1",aCustomClassInstance);
properties.Add("Property2","TestString2");
var myObject = GetDynamicObject(properties);
//Then use them like this (or rather the plug in uses them through reflection)
var customClass = myObject.Property1;
var myString = myObject.Property2;
}
Run Code Online (Sandbox Code Playgroud)
该库适用于动态变量类型,手动分配属性.但是我不知道预先添加了多少或哪些属性.
dynamic ×10
c# ×3
c#-4.0 ×3
javascript ×2
methods ×2
cil ×1
cocoa ×1
invoke ×1
objective-c ×1
oop ×1
properties ×1
python ×1
reflection ×1
ruby ×1
sql ×1
sql-server ×1