0
Требования:Какой параметр изменить ключевое слово я должен использовать?
- переменной не нужно быть назначен при переходе его в функцию. (в отличие от ref)
- В функции не обязательно назначаться переменная. (в отличие от)
В настоящее время я буду называть ключевое слово mykw в коде ниже.
public class MyObj{
int myInt;
public void setMyInt(int val){
myInt = val;
}
}
public class MyObjContainer{
private MyObj myObj;
//this function is the only way the user is allowed to get myObj.
//it returns whether myObj isn't null
//this is to disencourage programmers from using myObj without checking if myObj is null
public bool tryGetMyObj(mykw MyObj tryget){
if(myObj != null){
tryget= myObj;
return true;
}
//Micro optimization here: no needless processing time used to assign a value to tryget
return false;
}
}
public class MyScript {
public MyObjContainer[] myObjContainerList;
public void foo(){
foreach(MyObjContainer myObjContainer in myObjContainerList){
MyObj tryget; //Micro optimization here: no needless processing time used to assign a value to tryget
if(myObjContainer.tryGetMyObj(mykw tryget)){
tryget.setMyInt(0);
}
//else ignore
//if uses tries accessing tryget.myInt here, I expect C# compiler to be smart enough to find out that tryget isn't assigned and give a compile error
}
}
}
Для кода, приведенного выше, использование или ссылка вместо mykw дает мне ошибку.
Я хочу ключевое слово, которое соответствует как требованию 1, так и требованию 2. Я объяснил причины в комментариях в приведенном ниже фрагменте кода. –
@RyanAWE - такой модификатор не существует, поэтому вам нужно использовать 'ref' или' out', как показано. Я не был бы уверен, что они будут медленнее, чем подход, который вы ищете в любом случае. – Lee
Есть ли способ создать параметр-модификатор, который функционирует как mykw, чтобы я мог его использовать? –