Спасибо printf
! В среде Linux лучше всего показывать только один файл. Скажем, у вас есть два файла, mongoCmds.js
с несколькими командами:
use someDb
db.someColl.find()
, а затем файл оболочки драйвера, runMongoCmds.sh
mongo < mongoCmds.js
Вместо этого есть только один файл, runMongoCmds.sh, содержащий
printf "use someDb\ndb.someColl.find()" | mongo
Bash printf
гораздо более надежный, чем echo
, и позволяет \n
между командами принудительно их на несколько строк.
Вы можете использовать DELEGET FUNC в .NET 3.5 в качестве параметра в вашем методе RunTheMethod. Делегат Func позволяет указывать метод, который принимает ряд параметров определенного типа и возвращает один аргумент определенного типа. Вот пример, который должен работать:
public class Class1
{
public int Method1(string input)
{
//... do something
return 0;
}
public int Method2(string input)
{
//... do something different
return 1;
}
public bool RunTheMethod(Func<string, int> myMethodName)
{
//... do stuff
int i = myMethodName("My String");
//... do more stuff
return true;
}
public bool Test()
{
return RunTheMethod(Method1);
}
}
Если Вы хотите передать Метод как параметр, используйте:
using System;
public void Method1()
{
CallingMethod(CalledMethod);
}
public void CallingMethod(Action method)
{
method(); // This will call the method that has been passed as parameter
}
public void CalledMethod()
{
Console.WriteLine("This method is called by passing parameter");
}
class PersonDB
{
string[] list = { "John", "Sam", "Dave" };
public void Process(ProcessPersonDelegate f)
{
foreach(string s in list) f(s);
}
}
второй класс является Клиентом, который будет использовать класс памяти. Это имеет Основной метод, который создает экземпляр PersonDB, и это называет это методом Процесса object’s с методом, который определяется в Клиентском классе.
class Client
{
static void Main()
{
PersonDB p = new PersonDB();
p.Process(PrintName);
}
static void PrintName(string name)
{
System.Console.WriteLine(name);
}
}
Вам нужно использовать делегат . В этом случае все ваши методы принимают строку
параметр и возврат INT
- это наиболее просто представлено функцией FUNC
делегатом 1 . Таким образом, ваш код может стать правильным с таким простым изменением, как это:
public bool RunTheMethod(Func<string, int> myMethodName)
{
// ... do stuff
int i = myMethodName("My String");
// ... do more stuff
return true;
}
Делегаты имеют гораздо больше мощности, чем это, по общему признанию. Например, с C # вы можете создать делегат из выражения лямбда , поэтому вы можете вызвать ваш метод таким образом:
RunTheMethod(x => x.Length);
, который создаст анонимную функцию, подобную этой:
// The <> in the name make it "unspeakable" - you can't refer to this method directly
// in your own code.
private static int <>_HiddenMethod_<>(string x)
{
return x.Length;
}
, а затем пройти этот делегат к runthemethod
метод.
Вы можете использовать делегаты для подписок событий, асинхронного исполнения, обратных вызовов - всевозможных вещей. Он стоит читать на них, особенно если вы хотите использовать LINQ. У меня есть статья , которая является в основном в о различиях между делегатами и событиями, но вы можете все равно найти его полезным.
1 Это только основывается на универсальном FUNC
типа делегата в рамках; Вы можете легко заявить о своих собственных:
public delegate int MyDelegateType(string value)
, а затем сделать параметр типа MyDelegateType
вместо этого.
Вы должны использовать функцию FUNC
, который представляет функцию, принимающую строку
как аргумент и возврат int
:
public bool RunTheMethod(Func<string, int> myMethod) {
// do stuff
myMethod.Invoke("My String");
// do stuff
return true;
}
Тогда используйте его:
public bool Test() {
return RunTheMethod(Method1);
}
Вот пример без параметра: http://en.charp-online.net/csharp_faq:_how_call_a_method_using_a_name_string
С params: http://www.daniweb.com/forums/thrad98148.html#
Вы в основном проходите в массиве объектов вместе с именем метода. Затем вы используете как с помощью метода Invoke.
Объект параметров [] Параметры
-121--1781603-Если вы хотите, чтобы способность меняться, какой метод вызывается во время выполнения, я бы порекомендовал использовать делегат: http://www.codeproject.com/kb/cs/delegates_step1. ASPX
Это позволит вам создать объект для хранения метода для звонка, и вы можете пройти это к другим методам, когда он необходим.
Вот пример без параметра: http://en.charp-online.net/csharp_faq:_how_call_a_method_using_a_name_string
С params: http://www.daniweb.com/forums/thrad98148.html#
Вы в основном проходите в массиве объектов вместе с именем метода. Затем вы используете как с помощью метода Invoke.
Объект параметров [] Параметры