How do I require that all of the objects in a parameter array be passed as out? In my following code, I know that it's failing because my original parameters never get assigned and are thus null. Even though I would think they'd be passed as reference without having to explicitly say so, they don't seem to be. As a result, I've had to try and pass all of it as an out parameter.
Here's the parts of my code that I think matter.
ChatController(some elements removed)
class ChatController : ControllerBase
{
#region Views
ChatAreaView viewChatArea;
UserListView viewUserArea;
MessageView viewMessageArea;
LoginPromptView viewLoginPrompt;
#endregion
#region ViewModels
ChatAreaViewModel viewModelChatArea;
UserAreaViewModel viewModelUserArea;
MessageAreaViewModel viewModelMessageArea;
LoginPromptViewModel viewModelLoginPrompt;
#endregion
public override void CreateViewsAndViewModels()
{
//InitializeViewAndViewModel(out viewChatArea, out viewModelChatArea);
//InitializeViewAndViewModel(out viewMessageArea, out viewModelMessageArea);
//InitializeViewAndViewModel(out viewUserArea, out viewModelUserArea);
//InitializeViewAndViewModel(out viewLoginPrompt, out viewModelLoginPrompt);
InitializeViewsAndViewModels(new FrameworkElement[] { viewChatArea, viewUserArea, viewMessageArea, viewLoginPrompt },
new object[] { viewModelChatArea, viewModelUserArea, viewModelMessageArea, viewModelLoginPrompt });
}
}
ControllerBase(some elements removed)
public abstract class ControllerBase : PrismBase
{
public void InitializeViewAndViewModel<TView, TViewModel>(out TView view, out TViewModel viewModel)
where TView : FrameworkElement, new()
where TViewModel : new()
{
view = new TView();
viewModel = new TViewModel();
view.DataContext = viewModel;
}
public void InitializeViewsAndViewModels(FrameworkElement[] views, object[] viewModels)
{
if (views.Length != viewModels.Length)
throw new ArgumentOutOfRangeException("views and viewModels must have the same number of elements.");
for (int i = 0; i < views.Length -1 ; i++)
InitializeViewAndViewModel(out views[i], out viewModels[i]);
}
}
The problem area is here
public void InitializeViewsAndViewModels(FrameworkElement[] views, object[] viewModels)
{
}
All these objects here that I pass in to the method remain null when the method returns.
InitializeViewsAndViewModels(new FrameworkElement[] { viewChatArea, viewUserArea, viewMessageArea, viewLoginPrompt },
new object[] { viewModelChatArea, viewModelUserArea, viewModelMessageArea, viewModelLoginPrompt });
I want to require passing all of the views and viewModels array objects as out, but I can only seem to require the entire array itself be passed as out.
What can I do here?
EDIT: The entire problem seems to stem from the Plural form of the method, as I described above. If I got rid of that and I simply did this...
public override void CreateViewsAndViewModels()
{
InitializeViewAndViewModel(out viewChatArea, out viewModelChatArea);
InitializeViewAndViewModel(out viewMessageArea, out viewModelMessageArea);
InitializeViewAndViewModel(out viewUserArea, out viewModelUserArea);
InitializeViewAndViewModel(out viewLoginPrompt, out viewModelLoginPrompt);
//InitializeViewsAndViewModels(new FrameworkElement[] { viewChatArea, viewUserArea, viewMessageArea, viewLoginPrompt },
// new object[] { viewModelChatArea, viewModelUserArea, viewModelMessageArea, viewModelLoginPrompt });
}
everything works just swimmingly.